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

C 未定义数组的默认地址是否始终有效?,c,arrays,pointers,undefined,memory-address,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

在我的系统中,未定义的指针的默认值为0x00000000

void Demo()
{
    char cData;
    char *pExamplePtr;
    char pExampleArray[4];

    &cData <--- Address is 0x12345678
    pExamplePtr  <--- Value of pointer is 0x00000000
    pExampleArray[0] <--- Address is ???
}
void Demo()
{
字符cData;
char*pexamptr;
char-pExampleArray[4];
&cData
  • pExamplePtr
    未初始化,因此它不一定指向
    0

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

  • pExamplePtr
    未初始化,因此它不一定指向
    0

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


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

    char pExampleArray[4];
    
    char *pExamplePtr;
    
    &pExampleArray
    ,它是一个有效地址


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

    char pExampleArray[4];
    
    char *pExamplePtr;
    

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

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

    char pExampleArray[4];
    
    char *pExamplePtr;
    
    &pExampleArray
    ,它是一个有效地址


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

    char pExampleArray[4];
    
    char *pExamplePtr;
    

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

    指针pexampletr确实有一个有效地址。可能是您的意思比如说,它没有指向任何东西,因此是0x00000000,但事实并非如此


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

    指针pExamplePtr确实有一个有效的地址。也许你想说的是,它没有指向任何东西,因此没有指向0x00000000,但事实并非如此


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

    这就是我想要说的。这就是我想要的答案。谢谢。这就是我想要说的。这就是我想要的答案。谢谢。