简书链接:c语言结构体与指针的几种访问方式
文章字数:258,阅读全文大约需要1分钟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| //结构体与指针 /* struct Man{ char name[20]; int age; }; void main(){ struct Man m1 = {"Jack",30}; //结构体指针 struct Man *p = &m1; printf("%s,%d\n", m1.name, m1.age); printf("%s,%d\n",(*p).name,(*p).age); //“->”(箭头)是“(*p).”简写形式 printf("%s,%d\n", p->name, p->age); //(*env)-> //结构体指针
system("pause"); }
|
结构体数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| //指针与结构体数组 /* struct Man{ char name[20]; int age; }; void main(){ struct Man mans[] = { {"Jack",20}, {"Rose", 19} }; //遍历结构体数组 //1. struct Man *p = mans; for (; p < mans + 2; p++){ printf("%s,%d\n", p->name, p->age); }
//2. int i = 0; for (; i < sizeof(mans) / sizeof(struct Man); i++){ printf("%s,%d\n", mans[i].name, mans[i].age); }
|
结构体大小问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| struct Man{ int age; double weight; };
void main(){ //结构体变量的大小,必须是最宽基本数据类型的整数倍 //提升读取的效率 struct Man m1 = {20,89.0};
printf("%#x,%d\n", &m1,sizeof(m1)); =16, 也就是 应该是12,但是不能和最大的8整除,所以变成了16 getchar(); }
|