#include <stdio.h>
struct test
{
int a;
char b;
int c;
};
int main()
{
struct test *ptr = (struct test *)0;
ptr++;
fprintf(stderr, "by pointer = %zd\n", (size_t) ptr);
fprintf(stderr, "by sizeof = %zd\n", sizeof(struct test));
return 0;
}
最佳答案
在您的情况下,递增ptr
的行为是未定义。
请注意,(size_t)ptr
是实现定义的。将指针强制转换为 size_t 始终有效,但是如果结果不能用 size_t 类型表示,则行为未定义。
C 标准允许您将指针设置为 0,但指针算术仅在数组中有效,但允许您将 1 指向数组末尾或指向标量地址之后。
请注意,sizeof
类型的正确格式说明符是 %zu
- 否则您可能会出现更多未定义行为。
关于c - 如何在没有指针地址的情况下将结构指针分配为零并在下面的代码中查找结构的 sizeof ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41375790/