C/C++中的++(--)i、i++(--)的使用

文章目录

    • 0、前言
    • 1. 基本使用:
      • ①、前置++
      • ②、 后置++
      • ③、 使用总结
    • 2. 常用的一些使用
      • ①、在 if() \texttt{if()} if() 语句中的使用
      • ②、 在 while() \texttt{while()} while() 循环语句中使用:
      • ③、 在 for() \texttt{for()} for() 循环语句中使用:
    • 3、回顾一下
      • ①、必要性
      • ②、如何尽可能的避免出错

0、前言

相信大家在刷题的时候,尤其是新手经常会遇到数组下标越界的情况,一番debug之后发现是某一个地方的 ++ \texttt{++} ++ 或者是 -- \texttt{--} -- 用错了。排查bug之后,可能过几天又会遇到类似的问题,也就是这样的经历促使我写一篇博客总结一下关于 ++ \texttt{++} ++ -- \texttt{--} -- 的使用,希望以后这类bug少写一点吧。

C/C++中的++(--)i、i++(--)的使用_第1张图片
干大事专用图

1. 基本使用:

首先看两个特别简单的小栗子,这里以 ++ \texttt{++} ++ 为例, -- \texttt{--} -- 同理。

①、前置++

int a = 0;
int b = ++a;
cout << " " <<"a = " << a << endl;
cout << " " <<"b = " << b << endl;

// 输出结果:
b = 1
a = 1
解释: 对于 a++(--) \texttt{a++(--)} a++(--) ++(--)a \texttt{++(--)a} ++(--)a 这些操作就相当于 a   +=(-=)   1 \texttt{a +=(-=) 1} a +=(-=) 1 ;①中的 ++ \texttt{++} ++ 是前置的情况,那就先对自身进行 +1 \texttt{+1} +1 的操作,然后再执行赋值运算。

②、 后置++

int a = 0;
int b = a++;
std::cout << "a = " << a << endl;
std::cout << "b = " << b << endl; 

// 输出结果:
b = 0
a = 1
解释: 对于 a++(--) \texttt{a++(--)} a++(--) ++(--)a \texttt{++(--)a} ++(--)a 这些操作就相当于 a   +=(-=)   1 \texttt{a +=(-=) 1} a +=(-=) 1 ;②中的 ++ \texttt{++} ++ 是后置的情况,那就先执行赋值运算,然后再对自身进行 +1 \texttt{+1} +1 的操作。

③、 使用总结

  (1)首先需要明确 a++(--) \texttt{a++(--)} a++(--) ++(--)a \texttt{++(--)a} ++(--)a 就相当于 a   +=(-=)   1 \texttt{a +=(-=) 1} a +=(-=) 1
  (2)其次在运算中, 前置 的时候 先运算再进行操作后置 的时候是 先操作再运算 ,这里的 运算 指的是自身的 +1 \texttt{+1} +1 或者 -1 \texttt{-1} -1 运算,操作 指的是题目中的表达式,比如传参、四则运算等等反正就是要执行的内容。


2. 常用的一些使用

明确了基本的使用的使用方法之后,我们来看一下一些常用的语句中的自增、自减操作是否都符合使用方法,有没有一些特殊情况。

①、在 if() \texttt{if()} if() 语句中的使用

// 主要代码块

	int a = 0, b = 0, c = 0, d = 0;
	if (a++ < 5) {						// (1)
		cout << "a = "< a \texttt{a} a 的初始化为  0 \texttt{0} 0,因为是后置操作,所以先执行  if() \texttt{if()} if() 语句再自增,所以输出的结果是  1 \texttt{1} 1
对于(3)来说 c \texttt{c} c 的初始化为 0 \texttt{0} 0,因为是前置操作,所以先自增更新为 +1 \texttt{+1} +1 再执行 if() \texttt{if()} if() 语句,所以输出的结果是 1 \texttt{1} 1
符合基本使用方法。

②、 在 while() \texttt{while()} while() 循环语句中使用:

  • 前置自增
int a = 0;
while (++a < 5){
	std::cout << a << std::endl;
}

大家可以先想一想运算的逻辑,再验证一下自己的想法和输出结果是否一致。

// 输出结果:
1
2
3
4
这里的逻辑是这样的:先 a   +=   1 \texttt{a += 1} a += 1 ,这时 a \texttt{a} a 已经被赋值 +1 \texttt{+1} +1 了, 再拿结果进行判断。
也是符合基本使用方法的。

  • 后置自增
int a = 0;
while (a++ < 5){
	std::cout << a << std::endl;
}

// 输出结果:
1
2
3
4
5
这里的逻辑是这样的:先对当前的 a \texttt{a} a 值进行判断,再自增,输出的是自增后的结果。
也是符合基本使用方法的。

③、 在 for() \texttt{for()} for() 循环语句中使用:

大家体会以下四种写法即可,这四种写法是等价的,最常用的是(1)这种写法。

	for (int i = 0; i < 5; ++i){			// (1)
		std::cout << i << " ";
	}
	std::cout << std::endl;

	for (int i = 0; i < 5; i++){			// (2)
		std::cout << i << " ";
	}
	std::cout << std::endl;

	for (int i = 0; i < 5; ){				// (3)
		std::cout << i << " ";
		i++;
	}
	std::cout << std::endl;

	for (int i = 0; i < 5; ){				// (4)
		std::cout << i << " ";
		++i;
	}
// 输出结果:
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4

3、回顾一下

①、必要性

为什么我们要注意使用这些 ++ \texttt{++} ++ -- \texttt{--} -- 过程中可能引发问题?因为在计算机中的数数绝大多数都是从 0 \texttt{0} 0 开始的。比如给你一个数组 nums \texttt{nums} nums ,要求你输出 第一个元素 ,你应该返回的是 nums[0] 而不是 nums[1]。正因为有这些下标可能混淆的问题存在,很容易就会造成下标越界操作。尤其是在双指针以及滑动串口的题目中,很容易出错。

②、如何尽可能的避免出错

  • 1、深入理解 ++ \texttt{++} ++ -- \texttt{--} -- 的基本使用方法;
  • 2、学习初期可以多多模拟,按题目以及自己的思路多走几遍程序,滤清思路;
  • 3、最后一点也就是多刷题了。 P r a c t i c e   m a k e s   P e r f e c t   ! Practice \ makes \ Perfect \ ! Practice makes Perfect !

你可能感兴趣的:(C/C++基础小知识,c++)