数组和指针是对好基友,既然是好基友,那么我们就来证明看看
int b[8]= {0,1,2,3,4,};
printf("b[0]=%d \n",b[0]);
printf("b[1]=%d \n",b[1]);
printf("b[2]=%d \n",b[2]);
printf("b[0]=%d \n",*b); //直接当指针用啦
printf("b[0]=%d \n",*(b+0));//看看后面的结果你就知道其实指针类型是int
printf("b[1]=%d \n",*(b+1));
printf("b[2]=%d \n",*(b+2));
int *bp;
bp = b; //数组名就是指针啊,编译器没有任何告警
printf("b[0]=%d \n",*bp);
printf("b[0]=%d \n",*(bp+0));
printf("b[1]=%d \n",*(bp+1));
printf("b[2]=%d \n",*(bp+2));
printf("b[0]=%d \n",bp[0]);//这里直接用数组小标来访问,效果一样一样的,指针名也可想象为数组名用
printf("b[1]=%d \n",bp[1]);
printf("b[2]=%d \n",bp[2]);
printf("size of int is %d\n",sizeof(int));
printf("size of b %d \n",sizeof(b));
printf("size of bp %d \n",sizeof(bp));
运行结果全部正确!
b[0]=0
b[1]=1
b[2]=2
b[0]=0
b[0]=0
b[1]=1
b[2]=2
b[0]=0
b[0]=0
b[1]=1
b[2]=2
b[0]=0
b[1]=1
b[2]=2
size of int is 4
size of b 32
size of bp 4
结论(仅限于以上一维数组):
1)数组名在表达式中就是指针,指针类型就是数组的单个元素
2)指针也可以想象为数组名,且能够用下标"[]"来访问
3)第一条结论的例外情况,数组名在面对sizeof这个玩意的时候似乎显示出了他原来的本性,原来只有sizeof才能把好基友区分开啊