c中的指针和地址

GG3*_*G33 1 c pointers

我在操作 ac 代码中的一些指针时发现了一些我无法理解的东西。

int main(){
   int tab[]={4,6,8,9,20};
   printf("%p %p",tab,&tab);
   return 0;
}

Run Code Online (Sandbox Code Playgroud)

我尝试打印变量选项卡及其地址,知道选项卡保存数组中第一个元素的地址,并且选项卡本身的地址将是一个随机地址值,但无论出于何种原因,程序输出相同的值,我发现这真的很奇怪,所以如果有人能向我解释原因,我将不胜感激。

Som*_*ude 5

如果我们画出数组和指向它的公共指针,它看起来会像这样:

+--------+--------+--------+--------+--------+
| 选项卡[0] | 选项卡[1] | 选项卡[2] | 选项卡[3] | 选项卡[4] |
+--------+--------+--------+--------+--------+
^
|
&标签
|
选项卡[0]

指针 、&tab&tab[0](这就是简单的tab 衰减)都指向同一位置。

但类型不同:&tab是指向数组的指针,并且具有类型int (*)[5],而&tab[0]是指向单个元素的指针int,因此具有类型int *