c - 如何在没有指针地址的情况下将结构指针分配为零并在下面的代码中查找结构的 sizeof ?

标签 c pointers memory gnu

#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/

相关文章:

c - 计算多重集的唯一排序数的最佳方法

c - fread 给出空结果并检测到 glibc

c++ - 为什么我在赋值后得到不同的指针值?

sql-server - SQL Server - 当另一个进程需要它时,它真的释放内存吗?

c - backtrace() 陷入无限递归?

c++ - wxWidgets 有某种垃圾收集器吗?

C 结构指针作为参数

c - 传递给结构地址后获取数组内容

android - 在调用阶段使用 Native C Sinch Client 发生内存泄漏

c++ - 访问内存时发生奇怪的崩溃