简书链接: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();
}