【发布时间】:2021-04-21 15:37:17
【问题描述】:
typedef struct {
char a[5];
char b[7];
}footype;
void actOnFooishThings(footype *pfoo){
printf("Address of pfoo = %d\r\n", pfoo);
printf("Address of pfoo + 1 = %d\r\n", pfoo + 1);
printf("Size of pfoo = %d\r\n", sizeof(pfoo));
return;
}
void main() {
footype bar;
printf("Size of bar = %d\r\n", sizeof(bar));
actOnFooishThings(&bar);
}
输出:
Size of bar = 12
Address of pfoo = 537394080
Address of pfoo + 1 = 537394092
Size of pfoo = 4
由于向 pfoo 添加 1 产生了我预期的结果(基地址前 12 个字节),我很惊讶 sizeof 没有导致“12”。我理解“4”。它告诉我指针变量的大小,但它似乎与 pfoo + 1 结果不一致。 如何检索指针 pfoo 的大小?我会做一些像 (pfoo + 1) - pfoo 这样的傻事吗?
【问题讨论】:
-
请解释您认为这表明的不一致之处。
-
将不正确类型的值传递给
printf()的未定义行为。 -
指针的大小和它所指向的大小之间没有任何关系。对您的结构进行成像实际上是一兆字节。您是否认为任何指向该结构的指针也必须消耗一兆字节的存储空间?
-
@user1160866 比较
sizeof(pfoo)和sizeof(*pfoo)。这就是sizeof(footype*)和sizeof(footype)之间的区别。 -
对不起,“我如何检索指针 pfoo 的大小?”对于确定指针指向的大小的问题,这不是一个明确的措辞。这与您在这里提出的问题不同。不过,我确实很欣赏@dxiv,因为它检测到了您的意思。我可以提议为此创建一个单独的问题吗?
标签: c pointers structure sizeof