看到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);
}
0x7fff1c1107b00x7fff1c1107b0
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)