数组内的增量运算符
Increment operator inside array
我有一个使用数组执行队列操作的C程序。在该程序中,它们递增数组内的变量。我不明白这是怎么回事。因此,请解释这些操作:
array[++i];
array[i++];
请解释这些操作。
-
array[++i];
- 首先递增i
,然后在递增索引处为您提供元素相当于:
++i; // or i++ array[i];
-
array[i++];
- 也是第一个递增i
,但后缀operator++
在递增之前返回i
的值相当于:
array[i]; ++i; // or i++
它们递增数组内的变量。
不,他们没有。您可以说它们在对数组下标运算符的调用中递增i
。
++i
在计算之前递增i
。
评估后i
i++
。
如果i=1
则array[++i]
设置i=2
,然后获取array[2]
。
如果i=1
则array[i++]
获取array[1]
然后设置i=2
。
后操作和预操作发生在它们参与的表达评估之后或之前。
我通常不鼓励在表达式中使用后置和前递增运算符。 它们充其量会导致混乱,最坏的情况会导致错误。
考虑一下x = array[++i] + array[i--] ;
应该是什么。 看看混淆程序员(或必须修复代码的可怜魔鬼?:-(是多么容易。
后置和前递增和递减操作也会在宏中产生问题,因为您最终可能会多次复制操作,尤其是对于宏。
它更简单,更容易生成维护代码,以避免表达式中的后置和前增量,IMO。
所以,你知道i++
,++i
i
以 1 递增。此外,此指令返回 i
,因此您可以将其放在代码中需要 i
值的位置。
两者之间的区别在于i++
是后递增,++i
是前递增。这是什么意思?
好吧,假设i
是 6。当您执行以下操作时:
array[i++]
array[i]
你实际上会做:
array[6]
array[7]
因为您使用后递增:首先返回值,然后递增i
。
如果您这样做:
array[++i]
array[i]
你基本上会做:
array[7]
array[7]
因为你使用前增量:第一个增量i
,然后返回其值。
现在尝试找到你的代码做了什么;-(
希望这有帮助。
array[++i]; - 递增 i 的值,然后将递增的值用作数组的索引
数组[i++]; -索引到数组中,然后递增 i 的值
你的问题是在队列的上下文中,但我将使用堆栈来说明。
想象一个基于阵列的堆栈:
T stack[N]; // for some type T
size_t sp = N; // stack pointer
在此示例中,堆栈"向下"增长,其中索引 N
-1 是堆栈的底部,索引 0 是顶部。
推送操作如下所示:
stack[--sp] = val;
--sp
计算结果为 sp - 1
,并且作为副作用递减 sp
中的值,所以上面的语句等价于写
stack[sp - 1] = val;
sp = sp - 1;
需要注意的是,sp
可能会在作业完成之前更新。
弹出操作如下所示:
val = stack[sp++];
sp++
计算sp
的当前值,作为副作用,以sp
递增该值,所以等效于写入
val = stack[sp];
sp = sp + 1;
与上述警告相同。
您是否尝试将++用作数学运算符,c++不会尝试将其用作数学运算符而不是递增它,因为它在方括号运算符内,并且您不能使用++作为数学运算符。 ++ 仅用于递增变量,而不用作数学运算符。
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 你能在C++的数组 i,e(+、-、*、/) 中存储算术运算符吗?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 如何重载下标运算符 [] 以引用 2d STL 数组?
- 动态数组的 C++ 重载加运算符
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么我在声明对象数组时不能使用 -> 运算符?
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 如何将数组的重载运算符 [] 更改为 ()?
- 如何重载逗号运算符以将值分配给数组
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- c++ 使用动态分配运算符反向数组元素
- 重载运算符 [] 用于从对象数组中给出特定索引
- 使用新运算符C++创建多维数组的简单方法
- 重载运算符后打印二维数组<<
- C++ 中动态数组的赋值运算符
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- 试图引用已删除函数数组的相等运算符