未定义数组的默认地址是否始终是有效地址?

时间:2013-07-19 17:21:57

标签: c arrays pointers undefined memory-address

在我的系统中,未定义的指针的默认值为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?

3 个答案:

答案 0 :(得分:2)

  1. pExamplePtr未初始化,因此不一定指向0

  2. pExampleArray是一个数组,而不是一个指针,所以它也不会“指向”任何地方。如果您在表达式中使用pExampleArray,它将衰减为指向其第一个元素的指针 - 相当于&pExampleArray[0]

答案 1 :(得分:2)

指针pExamplePtr确实具有有效地址。也许你想说的是它没有指向任何东西,因此也没有指向0x00000000,但情况不一定如此。

同样关于pExampleArray[4],这是一个数组,而不是一个指针,它确实有一个vaild地址,就像你的第一个变量一样。

答案 2 :(得分:1)

下面声明的pExampleArray对象的地址:

char pExampleArray[4];

&pExampleArray,是有效的地址。

下面声明的pExamplePtr对象的地址:

char *pExamplePtr;

&pExamplePtr,它是一个有效的地址,与NULL不同。您似乎混淆了指针值,它是pExamplePtr并且在初始化或赋值之前是不确定的,并且是指针对象的地址。