C语言中的结构体指针
- 结构体指针概念
- 结构体变量成员访问
- 结构体指针作为函数参数
- 结构体数组指针
5.结构体指针数组 - 结构体的自引用与不完全声明
定义一个结构体变量:
struct 结构体名 *结构体指针变量名; 如:struct address *addr;
结构体指针变量初始化:
结构体指针变量名 = &结构体变量; 或者:结构体指针变量名 = &(结构体变量.第一个成员)
结构体指针 ->成员名;如addr->country; (*结构体指针).成员名;(*addr).country;//很少去进行使用,注意必须去使用(),,因为.优先级大于* 结构体变量.成员名 stu.name
注意:如果是结构体指针的话,它是可以指向自己的(引用自己)
结构体指针作为函数参数传递,那么会有很大优化:(实参传向形参的只是一个地址)
out_student(struct student *stup); //将结构体变量的地址传入进去
struct student stus[] = {stu,stu2}; struct student *stup2 = stus;
struct student *stups [] = {stup1,&stu2}; out_students(stups,2);
struct B; struct A{ struct *B b; }; struct B{ struct *A a; };
代码如下:
struct address{ char *country; char *city; char *street; }; struct student{ int xh; char *name; int age; int gender; struct address *addr; };
#include
#include"student2.h" #include
void out_student(struct student *stu); void out_students(struct student *stups[],int n); int main(void) { struct address addr1 = {"china","shanghai","beijing road"}; struct student stu = {1,"zhangsan",10,1,&addr1}; struct student *stup1 = &stu; struct address addr2={"jap","dongjing","hefei road"}; struct student stu2 = {2,"lisi",11,2,&addr2}; printf("student name:%s\n",stup1->name); printf("student street:%s\n",stup1->addr->street); printf("==================="); out_student(stup1); out_student(&stu2); /*定义一个结构体的数据*/ struct student stus[] = {stu,stu2}; struct student *stup2 = stus; int i ; for(i = 0 ;i < 2 ; i++) { out_student(stup2+i); printf("---------------------------------"); } /*定义一个结构体指针数组*/ struct student *stups [] = {stup1,&stu2}; out_students(stups,2); return 0; } void out_student(struct student *stu) { printf("student xh:%d\n",stu->xh); printf("student name:%s\n",stu->name); printf("student gender:%d\n",stu->gender); printf("student age:%d",stu->age); printf("stduent country:%s\n",stu->addr->country); printf("student city:%s\n",stu->addr->city); printf("student street:%s\n",stu->addr->street); printf("*"); printf("size of:%d\n",sizeof(stu)); } void out_students(struct student *stup[] ,int n) { //代码省略 }
欢迎大家的访问,代码可以进行run,因为最近比较忙,所以可能质量有点小下降,后面会修正。谢谢大家的访问
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229136.html原文链接:https://javaforall.net
