终于搞明白数组指针中一个*所代表的意思了
#include <stdio.h>
int main()
{
int a[3][5]={
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
int (*p)[5]; //数组指针
int *p1; //单数据指针
p=a;
printf("p=%p \n",p);
printf("*p=%p \n",*p);
printf("**p=%d \n",**p);
p++;
printf("(after p++) p=%p \n",p);
printf("(after p++) *p=%p \n",*p);
//*p如果是指针的话,它应该具备指针运算属性,可进行++运算,或者被赋值
// (*p)++; // error: wrong type argument to increment
// *p=*p+1; // error: incompatible types in assignment
//但是++运算和赋值运算后会报错,那说明*p不是指针,那(*p)应该是什么?
//*p={5,4,3,2,1}; // error: syntax error before '{' token
//a[1]={5,4,3,2,1}; // error: syntax error before '{' token
printf("size of p is: %d \n",sizeof(p)); //sizeof(p)是4,确实是一个指针
printf("size of *p is:%d \n",sizeof(*p));//sizeof(*p)是20,是一维数组的大小
//所以*p作为左值,代表的是整个行(1个1维数组),数组不能够被直接赋值;
//*p作为右值,代表的是这个数组的首元素的地址。由此可见*p的属性与一维数组相同 ,在运算中把它看做一个一维数组的变量名对待即可
printf("(*p+1)=%p \n",*p+1);
printf("(a[1]+1)=%p \n",a[1]+1);
printf("*(*p+1)=%d \n",*(*p+1));
printf("*(a[1]+1)=%d \n",*(a[1]+1));
p1= *p;
printf("p1=%p \n",p1);
printf("*p1=%d \n",*p1);
p1++;
printf("(after p1++) p1=%p \n",p1);
printf("(after p1++)*p1=%d \n",*p1);
return 0;
}
/* end line*/
运行结果:
p=0060FEE0
*p=0060FEE0
**p=1
(after p++) p=0060FEF4
(after p++) *p=0060FEF4
size of p is: 4
size of *p is:20
(*p+1)=0060FEF8
(a[1]+1)=0060FEF8
*(*p+1)=7
*(a[1]+1)=7
p1=0060FEF4
*p1=6
(after p1++) p1=0060FEF8
(after p1++)*p1=7