『C言語初級』第9章 - 構造

ここに画像の説明を挿入

序文

今日は 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言語の高度な内容をすぐにフォローしていきます~

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/hsjsiwkwm/article/details/132288855