- 此问题在此处已有答案**:
How come an array's address is equal to its value in C?(6个答案)
2天前关闭。
我在一个c代码中操作一些指针,我发现了一些我不能理解的东西。
int main(){
int tab[]={4,6,8,9,20};
printf("%p %p",tab,&tab);
return 0;
}
我试着打印变量tab和它的地址,知道tab保存了数组中第一个元素的地址,tab的地址本身是一个随机地址值,但是不管什么原因,程序输出了相同的值,我发现这很奇怪,所以如果有人能给我解释一下原因,我会很感激。
2条答案
按热度按时间62o28rlo1#
如果我们画出数组和指向它的公共指针,它看起来像这样:
指针
&tab
和&tab[0]
(普通的tab
decay 指向的是tab
)都指向同一个位置。但类型不同:
&tab
是指向数组的指针,并且将具有类型int (*)[5]
,而&tab[0]
是指向单个int
元素的指针,因此具有类型int *
。ubof19bj2#
当你声明数组时
编译器为5个数组元素的数组
tab
保留了内存。它将衰减为“int指针”类型的表达式,表达式的值将是数组制表符第一个元素的第一个地址。这就是tab
数组存储基址&tab[0]
的原因这就是
tab
和tab[0]
具有相同输出的原因。换句话说,
相当于