C言語学習(4):構造体とポインタ
2263 ワード
前言:
構造体は、プログラマがデータ成分を1つに集約できるカスタムデータ型です.名前、年齢、性別、学年などの情報を含むstudent構造体を定義します.
本文:
1、構造体の定義は以下の2種類がある.
この2つの違いは何ですか?実は定義するときは何の違いもありませんが、以下で構造体変数を初期化するときに違いがあります.
2、構造体変数の初期化
3、構造体配列
4、構造体ポインタ
5、構造体ポインタを関数とするパラメータ
まとめ
C言語の開発には構造体を用いるところが多い.
構造体は、プログラマがデータ成分を1つに集約できるカスタムデータ型です.名前、年齢、性別、学年などの情報を含むstudent構造体を定義します.
本文:
1、構造体の定義は以下の2種類がある.
struct Student //
{
const char* name;
int age;
};
typedef struct Student //
{
const char* name;
int age;
} STU;
この2つの違いは何ですか?実は定義するときは何の違いもありませんが、以下で構造体変数を初期化するときに違いがあります.
2、構造体変数の初期化
struct Student stu1; // , :C , struct Student
STU stu1; // ,
Student stu1; //C++ , struct
3、構造体配列
typedef struct Student
{
const char* name;
int age;
} STU;
int main()
{
STU stu[3];
stu[0].name = "xiaoming"; // “.”
stu[0].age = 20;
stu[1].name = "xiaohong";
stu[1].age = 21;
stu[2].name = "xiaohua";
stu[2].age = 22;
for (size_t i = 0; i < 3; i++)
{
std::cout << stu[i].name << ":" << stu[i].age << std::endl;
}
}
4、構造体ポインタ
typedef struct Student
{
const char* name;
int age;
} STU;
int main()
{
STU stu[3], *pStu;
pStu = stu; //
pStu->name = "xiaoming"; // “->”
pStu->age = 20;
(pStu + 1)->name = "xiaohong";
(pStu + 1)->age = 21;
(pStu + 2)->name = "xiaohua";
(pStu + 2)->age = 22;
for (size_t i = 0; i < 3; i++)
{
std::cout << (pStu + i)->name << ":" << (pStu + i)->age << std::endl;
}
}
5、構造体ポインタを関数とするパラメータ
typedef struct Student
{
const char* name;
int age;
} STU;
int getEvalAge(const int stuNum, STU* pStu);
int main()
{
const int stuNum = 3;
STU stu[stuNum];
STU* pStu;
pStu = stu; //
pStu->name = "xiaoming";
pStu->age = 20;
(pStu + 1)->name = "xiaohong";
(pStu + 1)->age = 21;
(pStu + 2)->name = "xiaohua";
(pStu + 2)->age = 22;
int evalAge = getEvalAge(stuNum, pStu);
std::cout << evalAge << std::endl;
}
int getEvalAge(const int stuNum, STU* pStu) //
{
int totalAge = 0;
for (size_t i = 0; i < stuNum; i++)
{
totalAge += (pStu + i)->age;
}
return totalAge / stuNum;
}
まとめ
C言語の開発には構造体を用いるところが多い.