指针必然是和数组紧密相连的,两者就是不分你我的关系。当你定义了指针a,那就可以把a当成数组来使用。
下面就些简单的概念方面说下:
定义 int a[2] ,那么a就是数组名,数组的首地址,同时也默认当成指针使用:*a=a[0]。
赋值:int *b ,那么b=a是成立的。
如果是二元数组,int a[2][3],那么a是什么呢?
你可以做一个实验:
int a[2][2]={{1,3},{2,4}},d[3]={1,2,3};
int *b,(*c)[2];
cout<<a<<"\n"<<*a<<*(*a);
大家会发现*(*a)的答案是1,也就是说如果是二元数组a就是数组的地址的地址,如果要求a[0]不能简单的用*a就行了,因为这还仅仅是a[0]的地址应该在*a前面再用一次*符号。
说明了上面的这些,大家再看看*(*(a+1)+1) 和*(a[1]+1)其实就是一样的。
赋值直接把a赋值给b是不行的,而是要把a赋值给c。大家可以想想为什么?因为a是数组的地址的地址的指针,而b是整形数指针当然不能赋值。而c刚好是数组的地址的地址指针
指针有时候确实比较绕。