结构体:
- 结构体是一种构造数据类型
- 把不同类型的数据组合成一个整体
1.结构体创建及初始化
2.结构体成员变量的修改
3.结构体传参3.1传值调用
3.2传值调用
1.1struct为结构体关键字,Stu为结构体名,s为结构体变量
1.2结构成员的可以是标量、数组、指针,甚至是它的结构体
#include<stdio.h>
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
int hight;//身高
};
int main(){
struct Stu s = {"zhangsan", 20, "男", 180};//局部变量初始化
printf("%s %d %s %d\n", s.name, s.age, s.sex, s.hight);//打印
}
下面代码是结构体中成员是 结构体类型的例子(结构体嵌套),以及他的初始化操作和打印操作:
#include<stdio.h>
struct Point
{
int x;
int y;
};
struct S
{
char c;
struct Point p;
double d;
char str[20];
};
int main() {
struct S ss = { 'x', {100, 200}, 3.14, "hehe" };//按照成员顺序依次赋值
struct S s1 = {.d=3.14, .c = 'x', .p.x =100};//.成员可以不考虑顺序
printf("%c %d %d %lf %s\n", ss.c, ss.p.x, ss.p.y, ss.d, ss.str);
printf("%c %d %d %lf %s\n", s1.c, s1.p.x, s1.p.y, s1.d, s1.str);
}
总结:
结构体成员初始化可以按顺序赋值,也可以用.成员名;
结构体内存在结构体的时候,初始化要加{}或.结构体名.成员
二:成员变量复制之后要修改该怎么办呢?
#include<stdio.h>
#include<string.h>
struct S
{
char name[20];
int age;
};
int main()
{
struct S s = {.age=20, .name = "zhansgan"};
printf("%s %d\n", s.name, s.age);
s.age = 30;//可以直接修改
//*char* 对s.name解引用也不行,因为他只能操作一个字符
//s.name = "linsensen";//error
strcpy(s.name, "lingsensen");
printf("%s %d\n", s.name, s.age);
return 0;
}
总结:
当成员变量是数组的时候,不能直接修改 ,因为数组名是数组首元素的地址,是一个二进制序列,是一个数值。所以要用到strcpy()函数(函数详情可参考https://blog.csdn.net/m0_56177713/article/details/127731176?spm=1001.2014.3001.5502)
,
三:结构体传参
#include<stdio.h>
struct S
{
int data[1000];
char buf[100];
};
//结构体变量.结构体成员名
//结构体指针->结构体成员名
void print1(struct S ss)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", ss.data[i]);
}
printf("%s\n", ss.buf);
}
void print2(struct S* ps)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", ps->data[i]);
}
printf("%s\n", ps->buf);
}
int main()
{
struct S s = { {1,2,3} , "hehe"};
print1(s);//传值调用
print2(&s);//传址调用
return 0;
}
总结:上面的print1和prinr2函数哪个好些?
答案是:首选print函数。
原因:
函数传参的时候, 参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
结构体传参的时候,要传结构体的地址。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/153237.html