结构体是值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
1.结构体的声明
结构体成员就是 char name[20] ,int age,char sex[5]
1.1结构体成员的类型

1.2类型的重命名

2.结构体变量的定义初始化
2.1结构体变量的定义

2.2结构体变量的初始化

3.结构体成员的访问
3.1结构体变量访问结构体成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
struct Stu
{
char name[20];
int age;
};
#include<string.h>
int main()
{
struct Stu s1 = { 0 };
//s1.name = "zhangsan";//错误的 name是数组名,数组名是数组首元素的地址,
//strcpy(s1.name, "zhangsan");//这样是正确的
char arr[] = { "zhangsan" };
strcpy(s1.name, arr); //把逗号左边字符串复制给右边,strcpy可以用数组名来操作
printf("%s\n", s1.name);
s1.age = 20;
printf("%d\n", s1.age);
return 0;
}
3.2结构体指针访问指向变量的成员
struct Stu
{
char name[20];
int age;
};
void print(struct Stu* p)
{
printf("%s\n", p->name); // 结构体可以直接用p->name来访问结构体成员
printf("%s\n", (*p).name);//对指针变量p解引用得到的就是stryct Stu s
}
int main()
{
struct Stu s = { "zhangsan",18 };
print(&s);//结构体地址传参
}

4.结构体传参
4.1结构体传参(传值)
struct Stu
{
char name[20];
int age;
};
void print(struct Stu s1)//函数创建结构体变量,把结构体变量s的值赋值s1
//然后打s1
{
printf("%s %d", s1.name, s1.age);
}
int main()
{
struct Stu s = { "zhangsan",18 };
print(s);//这里就是直接传值,
return 0;
}
4.2结构体地址传参
#include<string.h>
struct Stu
{
char name[20];
int age;
};
void set(struct Stu s1)
{
strcpy(s1.name, "zahngsan");
s1.age = 18;
}
void print(struct Stu s1)//函数创建结构体变量,把结构体变量s的值赋值s1
//然后打s1
{
printf("%s %d", s1.name, s1.age);
}
int main()
{
struct Stu s = { 0 };
//写一个函数,给s中存放数据
set(s);
//写一个函数,打印s中的数据(前面刚刚写过)
print(s);
return 0;
}
非常明显这样写是错误的,在传参的时候,形参紧紧只是实参的一份临时拷贝,

#include<string.h>
struct Stu
{
char name[20];
int age;
};
void set(struct Stu* p)//传递的是结构体变量s的地址,用指针接收
{
strcpy((*p).name, "zhangsan");
(*p).age = 18;//用解引用操作符通过地址找到结构体变量s
}
void print(struct Stu s1)//函数创建结构体变量,把结构体变量s的值赋值s1
//然后打s1
{
printf("%s %d\n", s1.name, s1.age);
}
int main()
{
struct Stu s = { 0 };
//写一个函数,给s中存放数据
set(&s);//这里应该用地址传参
//写一个函数,打印s中的数据(前面刚刚写过)
print(s);
return 0;
}





11万+

被折叠的 条评论
为什么被折叠?



