• ベストアンサー

ポインタ 構造体 関数

番号、名前、年齢を一組とした構造体の変数をmain関数で宣言し、そのアドレスを副関数に引き渡す。副関数で従業員番号、氏名、年齢を入力し、main関数に戻る。main関数で構造体の内容を表示する。 困ってます、ポインタがどうにも理解できません。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#include <stdio.h> struct person { int no; // 番号 char name[32]; // 名前 int age; // 年齢 }; void setPerson(struct person *p){ printf("input No:") ;scanf("%d", &(p->no)); printf("input Name:");scanf("%s", p->name); printf("input Age:") ;scanf("%d", &(p->age)); } int main(void){ struct person aPerson; setPerson(&aPerson); printf( "No:%d\n" "Name:%s\n" "Age:%d\n", aPerson.no, aPerson.name, aPerson.age); return 0; }

hivagonn
質問者

お礼

ありがとうございます、プログラムは実行でき思ったとおりに動いています。本当にありがとうございました。 使ったことのない、物が使われていたりするので、かなり勉強不足みたいでした、もっと勉強します、ありがとうございました。

その他の回答 (2)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

int n; int *np; と宣言したとき、 n, &n, np, *np はそれぞれ何を指すでしょうか? n はint型変数nの値=整数値 &n はint型変数nのアドレス np はintポインタ型変数npの値=アドレス *np はintポインタ型変数npの指すアドレスの内容=整数値 アドレス渡しは、 関数の定義で引数としてポインタを受け取るようにする 関数の呼び出しで、渡したい変数のアドレスを引数として与える という手順です。 void func(int *np) // 引数としてポインタを受け取る { *np = 10;} int main() {  int n;  func(&n);  // 変数のアドレスを引数として与える  printf("%d\n",n);  return 0; } このプログラムを実行すると、func内で代入した"10"がmainで見えることがわかります。

hivagonn
質問者

お礼

先頭アドレスの示し方、ポインタの意味なの、それぞれの意味はわかっているつもりです、ただプログラムを作ろうとしたとき、それぞれがシンクロしないのです、勉強不足ですね、参考にさせていただきます、ありがとうございました。

回答No.1

どの程度理解されているのかわからないので ポインタ・・・変数のアドレス http://www9.plala.or.jp/sgwr-t/c/sec10.html

hivagonn
質問者

お礼

ありがとうございます、もう少し勉強してみたいと思います。