如果知道结构体的指针,然后将一堆数据放在这地址上,数据会按顺序储存吗?
发布网友
发布时间:2022-12-31 04:25
我来回答
共3个回答
热心网友
时间:2023-11-01 15:37
是的,同学!编译器会乖乖地把成员的地址按照结构体中你书写的顺序来排列。不信你看:
#include<stdio.h>
struct Man
{
char head;
short neck;
double body;
long leg;
};
int main()
{
Man he;
printf("%d\n",&he.head);
printf("%d\n",&he.neck);
printf("%d\n",&he.body);
printf("%d\n",&he.leg);
return 0;
}
这段代码的结果是:
1703720
1703722
1703728
1703736
你看!neck排在head下面,body排在neck下面,leg排在body下面。
ps:你可能有个疑问。char占1个字节,short占2个字节。但输出显示分别占2,6,个字节。这是因为我的是64位计算机,是按8个字节寻址的,所以就凑成2+6=8个。不信的话你输出sizeof(Man),它等于24,而不是1+2+8+4=15。(如果知道请无视)
一般来说你用.和->找成员就行啦,没必要用地址~
热心网友
时间:2023-11-01 15:38
结构体是一个数据类型; 结构体指针是指向这个数据类型的指针变量,是存放着指向一个该种结构体数据的地址,类型就是该结构体指针。 指针的名字与成员没有直接关系。它就是一个名字而已; 只不过用这个名字去声明的结构体变量全部都是指向该结构体的指针,并且声明的时候不需要加*而已。(通过变量访问的时候还是要用*的) 一种声明的方法,方便程序里的处理,仅此而已。追问我只是想知道通过这个地址放入一堆数据 是按成员顺序放入的吗 我通过访问成员地址可以拿到某一段我要的数据吗?
热心网友
时间:2023-11-01 15:38
这个,在c中,应该是正确的。c语言中的对齐只是对后面的成员,不同的对齐可以用关键字来控制,会导致空洞。比如下面vc中这个:
#pragma pack (2) 表明是在2字节边界对齐,如果一个char,那么有一个超过1字节的成员的话,就会有一个直接的空洞。