以前从来没注意这点:数组名和&数组名的意义一样,都表示这个数组的地址,即数组第一个元素的地址
地址就是地址,不是指针,没有指向的意思。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int array[16]={1,2,3,4};
printf("array's address is %x/n",array);
printf("array's address is %x/n",&array);
int *p,**dd;
p=array;
printf("p is %d/n",*p);
p=&array;
printf("p is %d/n",*p);
dd=&array;
printf("dd is %d/n",**dd);
return 0;
}
编译时:
main.c:12: warning: assignment from incompatible pointer type
main.c:14: warning: assignment from incompatible pointer type
line 12的warning是因为&array的类型不明确,应该改为:p=(int *)&array
相应line 14应该改为dd=(int **)&array
但最后一句是不对的,会造成segment default
这句的原意是取数组的地址的地址给dd,但对于array来说&array和array一样,没有了再上一层的地址。
这主要是对数组和指针使用不灵活和思想僵化造成的。