终于搞明白数组指针中一个*所代表的意思了

终于搞明白数组指针中一个*所代表的意思了

#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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值