【原创】【考法总结】指针*与++结合的题目考法总结

代码均已调试出结果,放心食用,大致总共5种考法
【理论铺垫】①a[i]恒等价于(a+i)即*(&a[0]+i);i类似偏移量(别忘a代表数组首元素地址即&a[0])
②*(&a[i])恒等价于a[i]:&a[i]表示a[i]的地址,(&a[i])表示取出a[i]地址里的具体数据,即a[i]本身
p++ = *(p++) ≠ ++p =(p+=1)
【说明】*p++ = (p++)都是先执行p,再p++(即先取值,再指针后移);而 ++p和(p+=1)是先指针后移,再取值
·共性发现:下面的情况123好像都有去括号性?!!→就是“等价于”后面的指针括号可以掉后效果一样

#include<stdio.h>

int main() {
    int a[10]={11,12,13,18,10};
    int *p=&a[2]; //此处int后的*p表示指针类型变量,指向a[2]的地址
    printf("%d\n",p); //p表示a[2]的地址,输出7011624 
    printf("%d\n",*p);//此处*p表示a[2]地址存放的值,即*(&a[2])=a[2]=13  
    
//    *p++; //情况1.等价于*(p++)先*p再p++;下面printf输出p为7011628,*p为18 【解释】p指针先取值再后移指向a[3](int是4字节)
//	*++p; //情况2.等价于*(++p);p为7011628,*p为18【解释】原理大致同1→改编:++*++p时 p为7011628,*p为19;注意没*++p++编译错误  
	++*p; //情况3.优先级右往左看即++(*p),p为7011624,*p为14 【解释】*p=a[2]=13,++后*p变为14;而未改变p的值 
		  //【总结】情况123的优先级:地址取值符*的优先级与自增符++相同,此时从右往左看优先级
//	*p=*p+1; //情况4.p为7011624,*p为14 【解释】*p即a[2]所在地址的元素,即a[2]本身也即*(&a[2])=a[2]=13.在加1变成14;p不变的原因是此语句仅修改了*p的值,p的值未改 
			 //[tips]p的值为地址,*p的值为地址中的具体元素值 
//	*p=*(p+1); //情况5.p为7011624,*p为18 【解释】p指针先向后移动一个地址,移后指针p的值为a[3]的地址即&a[3],然后*作用后取出a[3]地址中的元素即a[3]本身,
			   //即*(&a[3])=a[3]=18;p不变的原因是此语句仅修改了*p的值,p的值未改 		  
    printf("p=%d\n*p=%d",p,*p); 

    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值