【问题标题】:Is the default address of an undefined array always a valid address? [duplicate]未定义数组的默认地址总是有效地址吗? [复制]
【发布时间】:2013-07-19 17:21:56
【问题描述】:
在我的系统中,未定义指针的默认值为 0x00000000。
void Demo()
{
char cData;
char *pExamplePtr;
char pExampleArray[4];
&cData <--- Address is 0x12345678
pExamplePtr <--- Value of pointer is 0x00000000
pExampleArray[0] <--- Address is ???
}
pExampleArray 的默认地址是什么?是 0x00000000 还是有一些像 cData 这样的有效地址?
【问题讨论】:
标签:
c
arrays
pointers
undefined
memory-address
【解决方案1】:
指针 pExamplePtr 确实有一个有效的地址。也许你的意思是它没有指向任何东西,因此 0x00000000 但不一定是这种情况。
关于pExampleArray[4],这是一个数组,而不是一个指针,它确实有一个有效地址,就像你的第一个变量一样。
【解决方案2】:
pExamplePtr 未初始化,因此不一定指向0。
pExampleArray 是一个数组,而不是一个指针,所以它也不会“指向”任何地方。如果您在表达式中使用pExampleArray,它将衰减为指向其第一个元素的指针——相当于&pExampleArray[0]。
【解决方案3】:
下面声明的pExampleArray对象的地址:
char pExampleArray[4];
是&pExampleArray,它是一个有效的地址。
下面声明的pExamplePtr对象的地址:
char *pExamplePtr;
是&pExamplePtr,它是一个有效的地址,不同于NULL。您似乎混淆了指针值,即pExamplePtr,在初始化或赋值之前是不确定的,与指针对象的地址。