既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
当在C表达式中使用标量类型的值时,编译器就会自动将这些标识符转换为整数保存。
这种机制的作用是,在这些标量类型上执行的操作与整型上执行的操作完全一样。
4. 结构体变量的定义和初始化
声明完结构体类型,就可以用它来定义和初始化结构体变量了。
注意:
结构体初始化与数组一样需要用
{}
代码示例:
#include<stdio.h>
struct grade
{
double math;
double english;
};
struct student
{
char name[20];//姓名
int age;//年龄
char sex[5];//性别
char id[20];//学号
struct grade;//成绩(这是一个嵌套结构体类型)
};
int main()
{
//定义、初始化结构体类型
struct student ly = {"王二", 23, "男", "2117305789", {98.5, 66.0}};
return 0;
}
不知道大家在用结构体类型定义一个变量时,有没有觉得结构体的类型名太长了。其实可以通过**
typedef
**来重定义结构体的类型名,如下所示:
typedef struct student
{
char name[20];//姓名
int age;//年龄
char sex[5];//性别
char id[20];//学号
struct grade;//成绩(这是一个嵌套结构体类型)
}stu;
注意这里的**
stu
并不是创建的变量,而是对于struct student
的重命名。之后我们既可以用stu
来创建变量也可以用struct student
**来创建。
二、结构体成员的访问
1.结构体变量访问成员
结构变量的成员是通过点**操作符(.)**访问的。点操作符接受两个操作数。
例如:
我们可以看到 s 有成员 name 和 age ;
那我们如何访问s的成员?
代码示例:
struct S s;
strcpy(s.name, "zhangsan");//使用.访问name成员
s.age = 20;//使用.访问age成员
2.结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
那该如何访问成员?
代码示例:
#include<stdio.h>
struct Stu
{
char name[20];
int age;
};
void print(struct Stu* ps)
{
printf("name = %s age = %d\n", (*ps).name, (*ps).age);
//使用结构体指针访问指向对象的成员
printf("name = %s age = %d\n", ps->name, ps->age);
}
int main()
{
struct Stu s = {"zhangsan", 20};
print(&s);//结构体地址传参
return 0;
}
三、结构体传参
结构体做函数参数有传递结构体和传地址
代码示例:
struct S
{
int data[1000];
int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s)
{
printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
printf("%d\n", ps->num);
}
int main()
{
print1(s); //传结构体
print2(&s); //传地址
return 0;
}
你觉得上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址**。**
今天的初阶结构体就分享到这里啦,期待博主下一篇文章吧!😘
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
9-1715665258700)]
[外链图片转存中…(img-JTMTzA05-1715665258700)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新