【问题标题】: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】:
    1. pExamplePtr 未初始化,因此不一定指向0

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

    【讨论】:

      【解决方案3】:

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

      char pExampleArray[4];
      

      &amp;pExampleArray,它是一个有效的地址。

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

      char *pExamplePtr;
      

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

      【讨论】:

        猜你喜欢
        • 2013-09-22
        • 2021-08-13
        • 1970-01-01
        • 2011-02-23
        • 2011-04-09
        • 1970-01-01
        • 2012-08-15
        • 2021-10-26
        • 2018-12-09
        相关资源
        最近更新 更多