C言語、構造体について
Posted: 2016年10月17日(月) 23:46
このソース、どこが何を表しているのかわかりません。
どういうことなのでしょうか、説明していただきたいです。よろしくお願いします。
どういうことなのでしょうか、説明していただきたいです。よろしくお願いします。
#include <stdio.h> // (関数printfの定義が入っているファイルを読み込む)
// 座標X,Yを持った構造体 point の定義
typedef struct point {
double cx; // 座標X
double cy; // 座標Y
} point;
// 構造体を引数で初期化してインスタンスを返却する関数
point set_point(double x, double y)
{
point pt;
pt.cx = x;
pt.cy = y;
return pt;
}
// エントリーポイント
int main(void)
{
// 構造体 point の インスタンス pt を作成
point pt;
// 構造体のインスタンスを返却する関数 から受け取ったインスタンスを pt にコピー
pt = set_point(10.0, 20.0);
// インスタンス pt を 画面(コンソール)に 書式 を使って表示
// 書式について:
// %4.1f は、以下の組み合わせ
// %4 -> 4の部分は表示されるときの全体桁数
// %.1 -> 1の部分は小数点以下の桁数
// %f -> float型で(実数を)表示
printf("座標:(%4.1f,%4.1f)\n", pt.cx, pt.cy);
// エントリーポイントの戻り値を返却(正常終了 = 0)
return 0;
}
inemaru さんが書きました:ソースが何をやっているのか?という質問であれば、こんな感じでどうでしょうか?
(用語の意味が不明瞭な場合は、検索してください)
#include <stdio.h> // (関数printfの定義が入っているファイルを読み込む) // 座標X,Yを持った構造体 point の定義 typedef struct point { double cx; // 座標X double cy; // 座標Y } point; // 構造体を引数で初期化してインスタンスを返却する関数 point set_point(double x, double y) { point pt; pt.cx = x; pt.cy = y; return pt; } // エントリーポイント int main(void) { // 構造体 point の インスタンス pt を作成 point pt; // 構造体のインスタンスを返却する関数 から受け取ったインスタンスを pt にコピー pt = set_point(10.0, 20.0); // インスタンス pt を 画面(コンソール)に 書式 を使って表示 // 書式について: // %4.1f は、以下の組み合わせ // %4 -> 4の部分は表示されるときの全体桁数 // %.1 -> 1の部分は小数点以下の桁数 // %f -> float型で(実数を)表示 printf("座標:(%4.1f,%4.1f)\n", pt.cx, pt.cy); // エントリーポイントの戻り値を返却(正常終了 = 0) return 0; }
意味的には、間違っていないつもりですが、box さんが書きました:インスタンスという用語をそのソースで使うのがふさわしいのかどうか、
いささか疑問に思います。
単に「変数を定義する」くらいでいいような気がしなくもありません。
構造体のインスタンスを初期化するのためです。けろりん さんが書きました:pt.cx=xなどとしているのは何のためでしょうか?
// int 型の value を作成
int value; // ← この段階だと、valueの値は不定
value = 100; // ← ここで初めて、値が確定する(つまり、初期化している)
けろりん さんが書きました:このソース、どこが何を表しているのかわかりません。
どういうことなのでしょうか、説明していただきたいです。よろしくお願いします。
#include <stdio.h> // 関数 printf の宣言を取り込む (定義は入っていない)
typedef struct point { // タグ名が point である構造体の型の宣言の開始
double cx; // cx は、point構造体のメンバ
double cy; // cy は、point構造体のメンバ
}point; // 構造体を struct point ではなく、point だけで参照できるように typedef した
point set_point(double x, double y) {
point pt; // point型の変数 pt を用意した (関数 set_point内だけに存在)
pt.cx = x; // pt のメンバ cx に x の値を代入
pt.cy = y; // pt のメンバ cy に y の値を代入
return pt; // pt の値を、関数 set_point の呼び出し元に返す
}
int main(void) {
point pt; // point型の変数 pt を用意した (関数 main内だけに存在)
pt = set_point(10.0, 20.0); // 関数 set_point を呼び出し、返却値を pt に代入
printf("座標:(%4.1f,%4.1f)\n", pt.cx, pt.cy); // pt の 2つのメンバの値を表示
return 0;
}