struct 中的 int 指针有时为 nil,有时已定义
int pointer in struct sometimes nil, sometimes defined
我有两个以完全相同的方式定义的结构。打印出其中的 int 指针的指针值,一个为 (nil),另一个为实际指针值。
#include <stdio.h>
struct struct1_ {
int *intPtr;
};
struct struct2_ {
int *intPtr;
};
int main(int argc, char const *argv[])
{
struct struct1_ struct1;
struct struct2_ struct2;
printf("struct1.intPtr %p\n", struct1.intPtr);
printf("struct2.intPtr %p\n", struct2.intPtr);
return 0;
}
输出:
struct1.intPtr 0x7ffca33a3f10
struct2.intPtr(无)
gcc 版本 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
这到底是怎么回事?
当局部变量未初始化时,它的值(或者对于结构,其成员的值)是不确定。所以不能保证任何特定的值都会被读取。
事实上,在很多情况下这样做会触发 undefined behavior。
我有两个以完全相同的方式定义的结构。打印出其中的 int 指针的指针值,一个为 (nil),另一个为实际指针值。
#include <stdio.h>
struct struct1_ {
int *intPtr;
};
struct struct2_ {
int *intPtr;
};
int main(int argc, char const *argv[])
{
struct struct1_ struct1;
struct struct2_ struct2;
printf("struct1.intPtr %p\n", struct1.intPtr);
printf("struct2.intPtr %p\n", struct2.intPtr);
return 0;
}
输出:
struct1.intPtr 0x7ffca33a3f10
struct2.intPtr(无)
gcc 版本 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
这到底是怎么回事?
当局部变量未初始化时,它的值(或者对于结构,其成员的值)是不确定。所以不能保证任何特定的值都会被读取。
事实上,在很多情况下这样做会触发 undefined behavior。