構造体の宣言について、「いろいろな形を目にするが違いが分からない」という声を聞くことがあります。
ここで少し整理してみましょう。
typedef struct [構造体タグ名] { (メンバ変数の宣言) } データ型名;構造体の定義と、typedef 宣言を同時に書いた形です。 これ以降、「データ型名」でこの構造体型を参照できます。
struct 構造体タグ名 { (メンバ変数の宣言) };このように書くと、「struct 構造体タグ名」で参照することになり、長くなるのであまり使いません。
typedef struct 構造体タグ名 データ型名;
#include <stdio.h> #define NUMPOINTS 3 struct point{ //座標データの構造体 double x; //x座標 double y; //y座標 }; void checkPrint( struct point *p ) { int i; for( i = 0; i < NUMPOINTS; i++ ) { printf( "(%d) x = %f, y = %f\n", i+1, p->x, p->y ); p++; } } main() { struct point pnts[NUMPOINTS] = { {0.1, 0.5}, {0.1, 1.0}, {1.5, 2.0} }; checkPrint( pnts ); }上のコードを(1)の書き方に変更してください。
[ 関連記事 ] 宣言:構造体タグ名
構造体配列:読み込み, 関数操作, ソート, ポインタソート
構造体へのポインタ,
リスト構造,
構造体を関数の戻り値に
[ ご案内 ] 構造体の要点を学習できるコース:要点講座 [ 構造体編 ]
10 11 12 13 14の結果となる。 printf( "%d ", (*p)++ ); と書くと、p の指す値を表示した後、p が指す値そのものを 1 進めることになるため。p を進めないと、配列の次の要素を指すことができない。