Thinkers'Studio
JavaとC言語の自習ツール
よく使う構造体宣言の形

 構造体の宣言について、「いろいろな形を目にするが違いが分からない」という声を聞くことがあります。
 ここで少し整理してみましょう。

よく使う構造体宣言

(1)いちばんよく使われる形

typedef struct [構造体タグ名] {
    (メンバ変数の宣言)
} データ型名;
 構造体の定義と、typedef 宣言を同時に書いた形です。 これ以降、「データ型名」でこの構造体型を参照できます。
 typedef は 構造体に限らず、既存のデータ型に別のデータ型名をつけるときに使うキーワードです。
 構造体タグ名は省略可能です。ふつうは「データ型名」だけを使うので省略します。構造体タグ名を使う必要のあるケースについては、別の機会に ・・・。

(2)struct ○○ で参照する形

struct 構造体タグ名 {
     (メンバ変数の宣言)
};
 このように書くと、「struct 構造体タグ名」で参照することになり、長くなるのであまり使いません。
 下記の typedef宣言をすれば「データ型名」で参照できるようになりますが、これらを一度に書ける(1)の形が結局便利です。
   typedef struct 構造体タグ名 データ型名;

(今回のクイズです)
 下は、(2)の書き方で構造体を定義して使う例です。
#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)の書き方に変更してください。
 POINT という「データ型名」で参照するものとします。どこをどのように変えればよいでしょうか?
   (答えは、次回のC言語の Tips で ・・・)

[ 関連記事 ] 宣言:構造体タグ名  構造体配列:読み込み, 関数操作, ソート, ポインタソート
        構造体へのポインタ, リスト構造, 構造体を関数の戻り値に
[ ご案内 ] 構造体の要点を学習できるコース:要点講座 [ 構造体編 ]

前回のクイズの答え: (前回の問題を見る
10 11 12 13 14 
の結果となる。 printf( "%d ", (*p)++ ); と書くと、p の指す値を表示した後、p が指す値そのものを 1 進めることになるため。p を進めないと、配列の次の要素を指すことができない。