<span style="font-size:18px;">#include<stdio.h> #include<stdlib.h> void main() { int a[5] = {1,3,5,7,9}; int *p = a;//指向元素的指针 int (*pa)[5] = &a;//指向数组的指针 printf("%x,%x",a,&a); printf("\n%d,%d",sizeof(*a),sizeof(*(&a))); printf("\n%d,%d",sizeof(*p),sizeof(*pa)); getchar(); }</span>
当看到 a与&a打印出来的地址是一样的时候,我就猜测 sizeof(*a)与sizeof(*(&a))是一样的,都是指向数组第一个元素。
结果打印的结果是:4,20
原来 *(&a)与*pa一样都是指向数组的指针,*p是指向元素的指针,两者是有区别的。在c里面 不能因为起始地址一样的,就认为指针操作的结果是一样的,这是一个误区。