C语言中数组&取地址的问题

 
 
#include <stdio.h>
int  main( void )
{
     int  a[5];
     printf ( "%x\n" , a);
     printf ( "%x\n" , a+1);
     printf ( "%x\n" , &a);
     printf ( "%x\n" , &a+1);
}

假如咱们的a的地址是:0Xbfe2e100, 并且是32位机,那么这个程序会输出什么?数组

  • 第一条printf语句应该没有问题,就是 bfe2e100
  • 第二条printf语句你可能会觉得是bfe2e101。那就错了,a+1,编译器会编译成 a+ 1*sizeof(int),int在32位下是4字节,因此是加4,也就是bfe2e104
  • 第三条printf语句多是你最头疼的,咱们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可能?本身存本身的?也许不少人会以为指针和数组是一回事,那么你就错了。若是是 int *a,那么没有问题,由于a是指针,因此 &a 是指针的地址,a 和 &a不同。可是这是数组啊a[],因此&a实际上是被编译成了 &a[0]。
  • 第四条printf语句就很天然了,就是bfe2e104。仍是不对,由于是&a是数组,被当作int(*)[5],因此sizeof(a)是5,也就是5*sizeof(int),也就是bfe2e114。
相关文章
相关标签/搜索