标准 C 是否真的指定指向对象的指针应包含该对象包含的所有字节的最低地址?



我搜索了C标准,但我没有找到关于这个问题的任何内容。如果这是实现定义的,为什么像这样使用 malloc 总是安全的?

char *p = (char*) malloc(100);
if (p == NULL)
      return;
for (i=0; i<100; i++)
{
     p[i] = ........
}

>如果 malloc 无法分配内存,则返回 NULL。 这就是为什么你可以像这样测试。

NULL 在标准中定义为空指针,并保证比较不相等指向任何对象或函数的指针。 它是永远不可能成为内存位置的东西的地址。

指针仅指向内存位置。 在 C 语言中,当你分配内存时,该内存的第一个字节始终是要指向的内容。知道内存从哪里开始,大小,你就可以知道它在哪里结束。

但是指针可以指向该数组中的任何位置。 您可以设置字符 * p_pointer = p + 1 或等效的 &p[1]; p_pointer[-1] 指向 p[0]。

最新更新