C言語の救世主(構造初級-8)

コンテンツ

1.1構造の宣言

構造体メンバーのタイプ構造体のメンバーは、スカラー、配列、ポインター、またはその他の構造体にすることができます。

1.2構造変数の定義と初期化

2.1構造体メンバーへのアクセス

2.2構造ポインタ(次のうちどれが良いか)

構造体にパラメータを渡すときは、構造体のアドレスを渡す必要があります。

3.1構造の宿題の練習


1.1構造の宣言

C言語には多くの型があることを知っています:char short int long float double型ですが、これらの型は複雑なオブジェクトを表すことはできません

生徒について説明してください:名前、年齢、性別、学年...

構造の基本構造は、メンバー変数と呼ばれる値のコレクションです。構造体の各メンバーは、異なるタイプの変数にすることができます。

//结构体申明:
struct(关键字) tag(名字)
{
 member-list;(成员变量)
}variable-list;(变量列表,可写可不写)

//申明一个学生结构体
struct Stu
{
  char name[20];//名字
  int age;//年龄
  char sex[8];//性别
  float score;//成绩
}s1,s2,s3;           //分号不能丢s1,s2,s3是通过struct Stu类型创建的变量
                      //s1,s2,s3是全局变量



 int main()
{
  struct Stu s4;   //局部变量
}
struct Stuは構造体型であり、structを省略するだけでなく、typedef(型の再定義)を使用できます。
typedef struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[8];//性别
	float score;
}Stu;//(对整个上面类型重新起名字,不能再创建列表)


 int main()
{
  Stu s6;   //局部变量
}

構造体メンバーのタイプ構造体のメンバーは、スカラー、配列、ポインター、またはその他の構造体にすることができます。

1.2構造変数の定義と初期化

struct Point
{
	int x;
	int y;
}p1 = {10, 15};//定义变量p1并初始化

struct S
{
	char c;
	struct Point sp;
	double d;
	char arr[20];
};

int main()
{
	struct Point p = { 100, 200 };//初始化
    struct S ss = { 'w', {100,20}, 5.5, "hello"};
	return 0;
}

2.1構造体メンバーへのアクセス

構造体変数のメンバーには、構造体メンバー演算子(。)を使用してアクセスします。

struct Point
{
	int x;
	int y;
}p1 = {10, 15};//定义变量p1并初始化

struct S
{
	char c;
	struct Point sp;
	double d;
	char arr[20];
};

int main()
{
	struct Point p = { 100, 200 };//初始化
    struct S ss = { 'w', {100,20}, 5.5, "hello"};
    printf("%c\n", ss.c);//结构体对象.结构体成员 
    printf("%c\n", ss.sp.x,ss.sp.y);
    printf("%c\n", ss.d);
    printf("%c\n", ss.arr);
	return 0;
}

2.2構造ポインタ(次のうちどれが良いか)

struct Point
{
	int x;
	int y;
}p1 = {10, 15};

struct S
{
	char c;
	struct Point sp;
	double d;
	char arr[20];
};

void print1(struct S s)//打印struct S类型的变量,s是一份临时拷贝
{
	printf("%c\n", s.c);
	printf("%d %d\n", s.sp.x, s.sp.y);
	printf("%lf\n", s.d);
	printf("%s\n", s.arr);
}

void print2(struct S* ps)//指针,传过来的是ss地址
{
	printf("%c\n", ps->c);
	printf("%d %d\n", ps->sp.x, ps->sp.y);
	printf("%lf\n", ps->d);
	printf("%s\n", ps->arr);
}

int main()
{
	struct Point p = {100, 200};
	struct S ss = { 'w', {100,20}, 5.5, "hello"};
    //ss.c = 'b';可以改变量
	//ss.sp.x = 1000;
	//ss.sp.y= 2000;
	//ss.d = 3.14;
    //strcpy(ss.arr, "world");//strcpy字符串拷贝
	print1(ss);//打印struct S类型的变量
	print2(&ss);//拿到ss

	return 0;
}

タイプstructSの変数の2つのコピーが作成され、パラメーターをスタックにプッシュする必要があります。構造体オブジェクトが渡されると、構造体が大きすぎ、パラメータスタッキングのシステムオーバーヘッドが比較的大きくなるため、パフォーマンスが低下します。

print2は過去のssアドレスのみを渡し、サイズは4/8バイトで、スペースを節約します

.structvariables.structメンバー

->構造体ポインタ->構造体メンバー

構造体にパラメータを渡すときは、構造体のアドレスを渡す必要があります。


3.1構造の宿題の練習

struct student
{
  int num;
  char name[32];
  float score;
}stu;
下面的叙述不正确的是:( )

A.struct 是结构体类型的关键字
B.struct student 是用户定义的结构体类型
C.num, score 都是结构体成员名
D.stu 是用户定义的结构体类型名

A:正确,在C语言中需要自定义类型时,要用到struct关键字

B:正确:在C语言中,用struct定义的结构体,定义结构体类型变量时,需要用struct student

C:正确:结构体中的变量名称,称之为结构体的成员

D:错误:stu是定义的结构体类型变量,不是名称,如果想要让stu为结构体类型名称时,必须在结构体定义时添加   typedef关键字

  

因此:选择D

3.2次のプログラムの出力は次のとおりです。

struct stu
{
    int num;
    char name[10];
    int age;
};


void fun(struct stu *p)
{
	printf(“%s\n”,(*p).name);
	return;
}


int main()
{
	struct stu students[3] = {
   
   {9801,”zhang”,20},
							  {9802,”wang”,19},
                              {9803,”zhao”,18}
                             };
    fun(students + 1);
	return 0;
}

main関数では、stu構造体タイプの配列studentが最初に定義されます。studentsは構造体の開始位置を指します。Students+ 1は配列の最初の要素を示します。したがって、funの正式なパラメーターは実際にはstudentsを指します。配列。の最初の要素なので、printはwangです

おすすめ

転載: blog.csdn.net/weixin_63543274/article/details/123733170