那该如何访问成员?如下:
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;}
运行结果:
文章插图
代码示例二:
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;
(主要原因是因为函数传参是在进行压栈操作)
结论
结构体传参的时候,要传结构体的地址 。
六、总结
- 【C语言】struct结构体内存如何分配
- c++中在头文件中定义static变量
- 5 c语言调用Linux的sleepy函数,Linux设备驱动程序学习
- C语言—普通、静态、局部、静态局部变量
- 打开少儿编程教育普及之门
- C语言CRC-16 XMODEM格式校验函数
- 下了个系统语言C盘爆了,语言包占用了大量的C盘空间Win7系统语言包如何卸载
- win7中文语言包环境下安装软件乱码的解决方法
- 关于古人植树养花的诗句?
- 关于西比灵的介绍 西比灵