看到http://blog.csdn.net/zhghost/article/details/5286271关于这两个的介绍,以前没注意到这个问题。
char a[MAX]; /*array of MAX characters*/
char *p = a; /*p为指向数组的指针*/
char *pa = &a; /*该语句是不正确的,pa的类型为'char *',而&a的类型为'char (*)[MAX]’*/
char (*pb)[MAX] = &a; /*该语句是正确的,pb的类型为'char (*)[MAX]'*/
#include<stdio.h>
#define ARRAY_LEN 6
int main(){
char a[ARRAY_LEN]={'a','b','c','d','e','\0'};
char *p=a;
char *pa=&a;
char (*point_to_str)[ARRAY_LEN];
point_to_str=&a;
printf("%p\n%p\n%p\n%p\n%p\n%p\n%p\n",a,&a,&a[5],p,&pa, &point_to_str);
printf("\n\n %p %p %p %p\n",a,&a[0],a+1,&a+1);
printf("%s\n%s\n", p, point_to_str);
}
0x7fff1c1107b0
0x7fff1c1107b0
0x7fff1c1107b5
0x7fff1c1107b0
0x7fff1c1107a8
0x7fff1c1107a0
0x400665
0x7fff1c1107b0 0x7fff1c1107b0 0x7fff1c1107b1 0x7fff1c1107b6
a和&a的值是一样的,但是类型不一样,一个是char的指针 char*,一个是整个数组的指针char (*)[ARRAY_LEN]。可以用+1体现不一样之处
&a[0]+1 == (int)(&a[0]) + sizeof(a[0])
&a+1 == (int)(&a) + sizeof(a)