CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
目录
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
代码
- #include
- //struct(结构体关键字),Stu-结构体标签 struct Stu-结构体类型
- struct Stu
- {
- //成员变量
- char name[20];
- short age;
- char tale[12];
- char sex[5];
- };
- int main()
- {
- struct Stu s;
- return 0;
- }
利用结构体去创建变量的时候,有两种方法:
一种是创建局部变量
一种是创建全局变量
结构的成员可以是标量、数组、指针,甚至是其他结构体。
- #include
- struct S
- {
- int a;
- char c;
- char arr[20];
- double d;
- };
- struct T
- {
- char ch[10];
- struct S s;//这里结构体成员是其他结构体
- char* pc;
- };
- int main()
- {
- char arr[]="hello,World!\n";
- struct T t={"hh",{100,"w","haha",3.14},arr};
- printf("%s\n",t.ch);
- printf("%s\n",t.s.arr);
- printf("%lf\n",t.s.d);
- printf("%s\n",t.pc);
- return 0;
- }
运行结果是
当结构体成员是结构体,访问它的时候依然跟其他结构体成员一样用点操作符即可。
- #include
- typedef struct Stu//typefef-换名的一个操作符
- {
- char name[20];
- short age;
- char tele[12];
- char sex[5];
- }stu;//这里将Stu换成stu,后面需要用该结构体时就只需要用stu就可以了
-
- void print1(stu tmp)//写一个函数用点操作符输出结构体成员
- {
- printf("name: %s\n",tmp.name);
- printf("age: %d\n",tmp.age);
- printf("tele: %s\n",tmp.tele);
- printf("sex: %s\n",tmp.sex);
- }
- int main()
- {
- stu s={"李四",40,"15524235464","男"};
- print1(s);
- return 0;
- }
运行结果是
用函数传参时,我们既可以用点操作符也可以用结构体指针如下图:
那么如图所示,当我们需要打印结构体数据时,这两种方法更好呢?
答案是:首选print2函数,原因:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。如图
结构体传参的时候,要传结构体的地址。