数组名称是C语言中的指针吗?

Max*_*Max 5 c arrays pointers

我知道C语言中的指针是一个保存地址的变量。例如:

int myVar;
int *p;
p = &myVar;
printf("%p\n", p);
printf("%p\n", &p);
Run Code Online (Sandbox Code Playgroud)

输出将是两个不同的地址,第一个是myVar的地址,第二个是指针本身的地址,这意味着指针也是变量,并且在内存中有一个地址(如果我错了,请更正我)

但是我的问题是关于数组的,例如,我们有以下代码:

int myArray[10];
Run Code Online (Sandbox Code Playgroud)

所以在这里我认为myArray也是一个指针,它保存着myArray的起始地址,在本例中是myArray [0],所以当我打印myArray [0]和myArray的地址时,我得到相同的结果:

printf("%p\n", &myArray[0]);
printf("%p\n", myArray);
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试打印myArray本身的地址时,这对我来说是令人困惑的部分:

printf("%p\n", &myArray);
Run Code Online (Sandbox Code Playgroud)

在这里,我得到了与我希望获得另一个地址(如指针)相同的结果。myArray是标签还是其他东西?

Bat*_*eba 8

&myArray[0]是数组第一个元素&myArray的地址,是数组的地址。这些地址必须具有相同的地址,但类型不同。

myArray不是一个指针。它是在某些情况下衰减为类型的指针的数组int*。作为的参数printf就是这种情况。