*p++、(*p)++、*(p++)

运行程序测验一下:

*p++与*(p++)

#include<iostream>
using namespace std;
int main()
{
	//测试*p++
	int a[5] = {1,100,200,300};
	int *p=a; 
	*p++= 10;
	cout << "*p: " << *p << endl;;
	cout<<"a[0]:"<<a[0]<<endl; 
	cout <<"a[1]:" << a[1] << endl;
	cout<< endl;
	//测试*(p++)
	 int b[5] = {1,100,200,300 };
	 int *q = b;
	 *(q++) = 10;
	 cout << "*q: " << *q << endl;;
	 cout << "b[0]:" << b[0] << endl;
	 cout << "b[1]:" << b[1] << endl;
	system("pause");
	return 0;
}

总结:*p++和*(p++)没有区别,查阅资料得到正确的理解,应该理解为,由于后++优先级高于*,应该先p++,后取值,但因为是后++,所以先执行*p,然后等赋值完成以后,p再++。

*p++与(*p)++

#include<iostream>
using namespace std;
int main()
{
	//测试(*p)++
	int a[5] = {1,100,200,300};
	int *p=a; 
	(*p)++;
	cout << "*p: " << *p << endl;;
	cout<<"a[0]:"<<a[0]<<endl; 
	cout <<"a[1]:" << a[1] << endl;
	cout<< endl;
	//测试*p++
	 int b[5] = {1,100,200,300 };
	 int *q = b;
	 *q++;
	 cout << "*q: " << *q << endl;;
	 cout << "b[0]:" << b[0] << endl;
	 cout << "b[1]:" << b[1] << endl;
	system("pause");
	return 0;
}


总结:(*p)++,先取*p,再使*p这个值加1,p指针并没有移动

            *p++, 按照上面的理解,最后结果应是先执行*p,但这里并没有输出句子什么的,所以取了之后无法看出来,然后又执行了指针p的移动。


(*p)++=2此式子是错误的,因为(*p)++其实是个右值,而*p++和*(p++)是左值。所以*p++=2和*(p++)才不会出错 

参考这两个例题:

例1

#include<stdio.h>
int main()
{
   
int*p = NULL;
   
int a[]={1,2,3,4}
    
   p
=a;
   
*(p++) + = 100;
   
printf(%d%d%d%d%d\n”,*p,a[0],a[1],a[2],a[3]);
   
return 0;
}

答案为:2 101 2 3 4

例2

函数作用:将整型数组p中n个数据增大
void increment_ints (int p [ ], int n)
{
  assert(p != NULL);  /* 确保p不为空指针 */
  assert(n >= 0);  /* 确保n不为负数 */
  while (n)  /* 循环n次. */
  {
    (*p)++;//不能用*p++, /* 增大p*/
    p++, n--;      /* p指向下一位,n减1 */
  }
}

  • 68
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值