默认情况下,global/local 结构指针的解引用值是否始终设置为 0(或等效值)?

Are dereferenced values of a global/local struct pointer always set to 0 (or equivalent) by default?

我知道 global/static 变量在 C 中默认设置为 0 或等效值。

指向结构的指针怎么样?

例如,考虑下面的代码 -

typedef struct meh
{
    int * ptr;
    int a;
    char c;
}var;

var *p;

int main(){
    p = malloc(sizeof(var));
    var *p1 = malloc(sizeof(var));

    printf("%d\t%p\t%c", p->a, p->ptr, p->c);
    printf("\n%d\t%p\t%c", p1->a, p1->ptr, p1->c);

    return 1;
}
//Output for both cases : 0 (nil) '[=11=]'

无论指针的范围如何,结构指针的解除引用值是否始终设置为 0?或者这里有更具体的规则。

malloc 函数返回的内存未初始化。返回的指针是分配给局部变量还是全局变量都没有关系。

这意味着 pointed-to 个对象具有 不确定的值 ,读取它们可能会导致 undefined behavior

如果您使用 calloc 函数分配内存,返回的内存所有字节都设置为 0。这意味着整数类型的值为 0。浮点类型也将为 0 if 使用 IEEE754 表示,指针值将是 NULL if 空指针表示为所有字节 0。在大多数系统上你可能会遇到这种情况,但一般情况下并非如此。