struct 关于C语言结构体,你不知道的用法?(初阶篇)( 二 )


那该如何访问成员?如下:
struct Stu{char name[20];int age;};void print(struct Stu* ps) {printf("name = %sage = %d\n", (*ps).name, (*ps).age);//对结构体指针解引用就可以找到指针指向的结构体//使用结构体指针访问指向对象的成员printf("name = %sage = %d\n", ps->name, ps->age);//通过结构体指针访问结构体成员}int main(){struct Stu s = { "小明", 20 };print(&s);//结构体地址传参return 0;}
运行结果:
代码示例二:
typedef struct student{char name[20];short age;char tele[12];char sex[5];}student;int main(){student xiaoming = { "小明", 20,"18899887654", "男" };student* p = &xiaoming;printf("名字: %s\n", p->name);printf("年龄: %d\n", p->age);printf("电话: %s\n", p->tele);printf("性别: %s\n", p->sex);return 0;}
运行结果:
五、结构体传参
如果要将结构体作为函数的参数传入函数,一般采用结构体指针的形式;
代码示例一:
struct Stu{char name[20];int age;};void print1(struct Stu s){//使用结构体访问结构体内的变量printf("name = %sage = %d\n", s.name, s.age);}void print2(struct Stu* ps) {//使用结构体指针访问指向对象的成员printf("name = %sage = %d\n", ps->name, ps->age);//通过结构体指针访问结构体成员}int main(){struct Stu s = { "小明", 20 };print1(s);print2(&s);//结构体地址传参return 0;}
运行结果:

struct  关于C语言结构体,你不知道的用法?(初阶篇)

文章插图
代码示例二:
typedef struct student{char name[20];short age;char tele[12];char sex[5];}student;void print1(student tmp)/*函数1 采用结构体传参,点式访问*/{printf("名字: %s\n", tmp.name);printf("年龄: %d\n", tmp.age);printf("电话: %s\n", tmp.tele);printf("性别: %s\n", tmp.sex);}void print2(student* tmp) /*函数2 采用结构体指针传参,箭头访问*/{printf("\n");printf("名字: %s\n", tmp->name);printf("年龄: %d\n", tmp->age);printf("电话: %s\n", tmp->tele);printf("性别: %s\n", tmp->sex);}int main(){student xiaoming = { "小刚", 20,"18899887654", "男" };print1(xiaoming);print2(&xiaoming); /*传递结构体指针*/return 0;}
运行结果:
这两个函数都能达到目的,但我们一般采用函数 。因为:
如果结构体里面包含大量的数组, long long, 等,我们会发现如果给函数直接传结构体过去,内存资源将会消耗极大;
而我们知道一个指针的大小(无论什么类型指针)在32位机器上占4个字节,在64位机器上占8个字节,因此采用 的传参将会大大节约资源;
对比解释
我们在创建整数 、数组 ,等会首先进行声明,然后写变量名
比如:
int a;char ch[10];
而我们的结构体就相当于int、char 等
比如:
struct student a;其实就类似于int a;
如果有把 改成其他名字(即结构体末分号前面的名字)比如stu
就可以这样写 stu a;类似于int a;
同理,指针变量创建时候,int*、char* 、*等等;结构体指针也是*
struct student* pc;类似于int* pc;
(主要原因是因为函数传参是在进行压栈操作)
结论
结构体传参的时候,要传结构体的地址 。
六、总结