ホーム » スタッフ » 斉藤徹 » 構造体の関数との受け渡し

2011年10月
« 9月   11月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

構造体の関数との受け渡し

週末の授業が都合が悪く、高久先生と交代で金曜と近い状態での構造体2回目。

前回の授業で、構造体の関数との受け渡しとして、ポインタ渡しとアロー演算子を 説明したけれど、ポインタ渡しに関連する概念をもう一度説明。

  • C言語で一般的な値渡し(call by value)
  • 大域変数渡し(競合が発生しやすいので極力使わない方がいい)
  • 関数の返り値(1つしか値を返せない)
  • 配列の参照渡し(配列名は先頭のポインタと同じなので本当はポインタ渡し)
  • ポインタ渡し(指定したポインタの先に書きこんでもらう)

これに加え、前回授業で説明の抜けた構造体の初期化を紹介。 次に、2年で基本は習っているはずなので早々に演習として、 「前課題でのファイル入出力で、そのデータを構造体で記述すること」 として演習をしようと思ったけど、講義入れ替えなので演習室が使えない…

仕方が無いので補足説明として、 struct …{ } の後の";"忘れが多いのでその注意や、構造体宣言もスコープがあるため、 関数内でstruct…を宣言すると、自分の関数との受け渡しがかけない。 だから、構造体宣言はプログラムの最初で…といった説明を行う。

早く講義を終えた後、プログラムの好きな学生が typedef について聞いてきた。 typedef struct… では、struct…での構造体変数の宣言部の部分に、新しくつける名前を 記載することを説明。ただし、C++ では、タグ名がそのまま型名として利用できるため、 typedef struct … という使い方は、めったにすることがなくなったことを説明。

typedef struct PersonTag {
char name[ 20 ] ;
int  age ;
} Person ;
void main() {
Person saitoh ;
strcpy( saitoh.name , "t-saitoh" ) ;
saitoh.age = 46 ;
}