1、普通变量++
和+=1
的区别
在我们的理解中, 对一个变量进++操作和+=1的操作是一样的,同理对变量的—操作和-=操作也是一样,如下代码
int i =1;
i++;
System.out.println(i);
int b = 1;
b+=1;
System.out.println(b);
输出结果都是2
2、指针变量++
和+=1
的区别
先看代码
int i=1;
int * p_i = &i;
std::cout << "指针原值:"<<*p_i << std::endl;
*p_i+=1;
std::cout << "指针+=1后的值:"<<*p_i << std::endl;
*p_i++;
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++;
拆解
这行代码其实是先对指针进行++操作,在用*进行取值,拆解后相当于下面的代码
p_i ++; // 先对指针进行 ++ 操作,int类型占用4个字节,所以 ++ 操作是把指针地址往后移动4个字节后的地址;
int result = *p_i; // 这一步在对指针进行取值操作,因为上面的++操作已经将指针指向了一个未知的地址,所以现在是个野指针,取出来的值也是一个未知的数字;
3、解决方案
解决方案也很简单,只需要将指针括起来即可,也就是将 *p_i++;
改为 (*p_i)++;
,这样就会先取指针的值在进行++操作了;
整改后如下代码
int i=1;
int * p_i = &i;
std::cout << "指针原值:"<<*p_i << std::endl;
*p_i+=1;
std::cout << "指针+=1后的值:"<<*p_i << std::endl;
(*p_i)++;
std::cout << "指针*p_i++后的值:"<<*p_i << std::endl;
输出结果如下图