序文
今日は Xiaoyang が C 言語の構造について皆さんと共有します。C 言語では、構造型は構造型に属します (他の構造型には配列型、共用体型などがあります)。今日は主に簡単に。構造。
1. 構造体とは何ですか?
実際の問題では、データのセットには多くの異なるデータ型が含まれることがよくあります。例えば学生情報を登録する場合、char型の名前、int型またはchar型の学籍番号、int型の年齢、char型の性別、float型の成績などが必要になる場合があります。別の例として、本を記録するには、char 型のタイトル、char 型の著者名、float 型の価格が必要です。このような場合、単純なプリミティブ データ型や配列さえも使用することが困難です。この構造はこの問題を効果的に解決できます。
構造体は本質的にはデータ型ですが、複数の「メンバー」を含めることができ、各メンバーの型は同じでも異なっていてもよく、基本データ型または別の構築された型でも構いません。
この構造の利点: この構造は、さまざまな種類のデータを記録できるだけでなく、プログラムの読解と移植に役立つデータ構造を「高凝集性、低結合」にすることができます。この構造により、メモリ上の CPU のパフォーマンスが向上し、アクセス速度が向上します。
簡単に言うと、構造体はメンバー変数と呼ばれる値の集合であり、構造体の各メンバーは異なる型の変数にすることができます。
2. 構造体の宣言
一般的な形式:
struct 结构体类型名
{
成员列表
};
したがって、struct キーワードは、次が構造体であることを意味します。
たとえば、Student 構造体を宣言するには、次のようにします。
struct Student{
//声明结构体
char name[20]; //姓名
int num; //学号
float score; //成绩
};
上記のステートメント描述了一个包含三个不同类型的成员的结构,但它还没创建一个实际的数据对象,每个成员变量都用自己的声明来描述,以分号结束。花括号之后的分号表示结构声明结束
。構造体宣言は、関数の外側に配置することもできます (これはグローバル構造体であり、同様です。全局变量
宣言されたすべての関数は使用可能になります)。または、関数の内部に配置できます (これはローカル構造体で、同様です。配置できるのは局部变量
、この関数内で使用する場合、グローバル構造体と同じ名前の場合、グローバル構造体は一時的にブロックされます)。
3. 構造体変数の定義と初期化
構造体の型を宣言した後の次のステップは、構造体 i を定義して初期化することです。
struct student
{
char name[20];
int age;
char sex[5];
char id[20];
}s1,s2; //声明类型的同时定义结构体变量
//定义结构体变量
struct student s3;
struct student s4;
int main()
{
return 0;
}
上記の s1、s2、s3、s4 は通常の変数で、グローバルに配置するとグローバル変数、関数内に配置するとローカル変数になります。
次に、構造体の初期化を見てみましょう。
struct student
{
char name[20];
int age;
char sex[5];
char id[20];
}s1 = {
"zhuxinrui",21,"女","21006666" };
int main()
{
//初始化:定义变量的同时赋值
struct student s2 = {
"yangrui",21,"女","210047218" };
return 0;
}
1. typedef キーワード
当我们每次定义结构体变量时,结构体的类型名过长,想要简化可以使用typedef来对结构体类型重定义
1:>
#include<stdio.h>
typedef struct student stu;
struct student
{
char name[20];
int age;
char sex[5];
char id[20];
};
int main()
{
stu s3 = {
"yangrui",21,"女","210047218" };
return 0;
}
2:>
#include<stdio.h>
typedef struct student
{
char name[20];
int age;
char sex[5];
char id[20];
}stu;
int main()
{
stu s4 = {
"yangrui",21,"女","210047218" };
return 0;
}
2. 匿名構造
匿名構造体タイプは、構造体の宣言時に不完全に宣言できることを意味します。
struct
{
int num;
};
そこで問題は、匿名構造型の変数をどのように定義するかということです。
错误写法
:
struct
{
int num;
};
struct n1;
struct n2 = {
666 };
正确做法
:
struct
{
int num;
}n1,n2={
666};
要約:
必须在声明匿名结构体类型时就定义变量。
4. 構造体パラメータの受け渡し
構造体変数を関数のパラメータとして渡す場合、それらをどのように受け取って使用すればよいでしょうか?
使用例
構造体の印刷関数
#include<stdio.h>
typedef struct teacher T;
typedef struct student S;
struct teacher
{
char name[20];
char subject[20];
};
struct student
{
char name[20];
int age;
char sex[5];
char id[20];
T t1;
};
S s1 = {
"阿蕊",20,"女","21006666",{
"老王","语文"} };
void print1(S s)
{
printf("%-8s %-2d %s %s %s %s\n", s.name, s.age, s.sex, s.id, s.t1.name, s.t1.subject);
}
void print2(S* s)
{
printf("%-8s %-2d %s %s %s %s\n", (*s).name, (*s).age, (*s).sex, (*s).id, (*s).t1.name, (*s).t1.subject);
}
int main()
{
S s2 = {
"小羊",21,"女","210047218",{
"老丁","英语"} };
print1(s1);
print2(&s2);
return 0;
}
ここで、print1 と print2 という 2 つの関数について考えてみましょう。どちらが優れているでしょうか?
友達の皆さん、それについて考えたり、理解できない場合は、Xiaoyang に質問するか、コメント エリアにメッセージを残してください。最後に、この記事が C 言語を学習する道にいるすべての人に役立つことを願っています。新しいC言語の高度な内容をすぐにフォローしていきます~