C语言里面关于数组的一个容易忽视的小细节

ginobili@VM_44_28_sles10sp1:~/code> cat test3.cpp 

#include <stdio.h>

int main()
{
char a[5] = {0};
char *pa = a;
printf("a = %p, pa = %p, &a=%p, &pa=%p ", a, pa, &a, &pa);
return 0;
}
ginobili@VM_44_28_sles10sp1:~/code> g++ test3.cpp
ginobili@VM_44_28_sles10sp1:~/code> ./a.out
a = 0xbfc1e73f, pa = 0xbfc1e73f, &a=0xbfc1e73f, &pa=0xbfc1e738

原因是为什么呢?

array和pointer的区别:

1. T a[5];

   T* pa = a; //把数组a转换成指向数组第一个元素的地址

2. a[2] == *(a+2); //把数组a转换成指向数组第一个元素的地址

3. (T*)&a == (T*)a ; //数组的地址是 数组第一个元素的地址

原文地址:https://www.cnblogs.com/Torstan/p/3993816.html