c/c++中++、--运算和 +=1、-=1运算的区别

发布时间:2023-03-18 11:42:14 作者:yexindonglai@163.com 阅读(740)

1、普通变量+++=1的区别

在我们的理解中, 对一个变量进++操作和+=1的操作是一样的,同理对变量的—操作和-=操作也是一样,如下代码

  1. int i =1;
  2. i++;
  3. System.out.println(i);
  4. int b = 1;
  5. b+=1;
  6. System.out.println(b);

输出结果都是2

2、指针变量+++=1的区别

先看代码

  1. int i=1;
  2. int * p_i = &i;
  3. std::cout << "指针原值:"<<*p_i << std::endl;
  4. *p_i+=1;
  5. std::cout << "指针+=1后的值:"<<*p_i << std::endl;
  6. *p_i++;
  7. std::cout << "指针*p_i++后的值:"<<*p_i << std::endl;

输出结果如下

怎么回事?++和 +=1的结果不一样了?
*p_i+=1; 的结果是正常的;
*p_i++; 的结果怎么就变成了一个随机数了?

2.1、指针++运算的解释

以上的问题有点复杂,我们一个个拆解来看一下子,

2.1.1、*p_i+=1; 拆解

这个先将 *p_i 的值拿到在进行 +1 操作,所以结果= 2,这个没啥毛病;

2.1.2、*p_i++; 拆解

这行代码其实是先对指针进行++操作,在用*进行取值,拆解后相当于下面的代码

  1. p_i ++; // 先对指针进行 ++ 操作,int类型占用4个字节,所以 ++ 操作是把指针地址往后移动4个字节后的地址;
  2. int result = *p_i; // 这一步在对指针进行取值操作,因为上面的++操作已经将指针指向了一个未知的地址,所以现在是个野指针,取出来的值也是一个未知的数字;

3、解决方案

解决方案也很简单,只需要将指针括起来即可,也就是将 *p_i++;改为 (*p_i)++;,这样就会先取指针的值在进行++操作了;
整改后如下代码

  1. int i=1;
  2. int * p_i = &i;
  3. std::cout << "指针原值:"<<*p_i << std::endl;
  4. *p_i+=1;
  5. std::cout << "指针+=1后的值:"<<*p_i << std::endl;
  6. (*p_i)++;
  7. std::cout << "指针*p_i++后的值:"<<*p_i << std::endl;

输出结果如下图

关键字c++