C语言基本知识(6)— 结构体

一、结构体的声明

1.1、结构的基本知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2、结构的声明

struct tag
{
      member-list;
 }variable-list;
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];
int height;

}S1,S2,S3;//全局变量,一般不用
int main()
{
struct Stu S4;//局部变量


return 0;
}

1.3、结构体成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

1.4、结构体变量的定义和初始化

#include<stdio.h>
struct point
{
int x;
int y;
};

struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];
int height;

}S1,S2,S3;

struct Q
{
char a;
struct point pp;
double d;
char str[20];

};

int main()
{
struct point p = { 10,20 };//初始化
printf("%d %d\n",p.x ,p.y );
 

struct Stu s = { "zhangsan",20,"男",180 };
printf("%s %d %s %d \n", s.name, s.age ,s.sex, s.height);
 

struct Q ss = { 'x',{100,200},3.14,"hehe" };
 struct Q sss = { .d = 5.00,.pp.x = 150 };

        printf("%c %d %d %lf %s\n",ss.a,ss.pp.x ,ss.pp.y ,ss.d ,ss.str );
 printf("%c %d %d %lf %s\n",sss.a,sss.pp.x ,sss.pp.y ,sss.d ,sss.str );//可以乱序初始化
  
   //修改
strcpy(s.name, "zhangsanfeng");
printf("%s\n",s.name );

return 0;
}

二、结构体成员的访问和传参

2.1、结构体的访问

struct S
{
int date[1000];
char buf[100];
};

void print1(struct S ss)  //值传递
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ",ss.date[i]);//结构体变量.结构体成员
}
printf("%s\n",ss.buf );

}

void print2(struct S* ps)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ",ps->date[i]);//结构体指针->结构体成员名
}
printf("%s",ps->buf );
}

int main()
{
struct S s = { {1,2,3},"hehe"};
print1(s);  //传值调用
print2(&s); //传址调用

return 0;
}

上面的 print1 和 print2 函数哪个好些?

答案是:首选print2函数。

原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以

会导致性能的下降。

结论:结构体传参的时候,要传结构体的地址。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值