前置增量和后置增量哪个更好?

现在的编译器已经足够聪明了,它们根据需求优化代码。 post 和 pre-increment 都有自己的重要性,我们需要根据要求使用它们。如果您通过字符指针逐字节读取闪存,那么在这里您必须使用后增量,否则将跳过数据的第一个字节。在预递增的情况下,指向地址将先递增,然后再读取该值。
在下面的示例代码中,创建一个字符数组并使用想要读取数组值的字符指针。但是如果使用预增量运算符会发生什么? 这个问题的答案是“A”将被跳过而 B 将被打印出来。

#include <stdio.h>
int main(void)
{
    char acData[5] = {'A','B','C','D','E'};
    char *pcData = NULL;
    pcData = acData;
    printf(%c ,*++pcData);
    return 0;
}

输出:B

但是如果使用后增量代替前增量,那么问题就会得到解决,将得到 A 输出。

#include <stdio.h>
int main(void)
{
    char acData[5] = {'A','B','C','D','E'};
    char *pcData = NULL;
    pcData = acData;
    printf(%c ,*pcData++);
    return 0;
}

输出:A

除此之外,当我们需要一个循环或者只需要递增操作数时,预递增比后递增要好得多,因为在后递增的情况下,编译器可能已经创建了旧数据的副本,这需要额外的时间。 这不是 100% 正确的,因为现在编译器非常聪明,以一种在前后增量之间没有区别的方式优化代码。 所以建议,如果不需要后增量,那么必须使用前增量。

注意:一般后置增量与数组下标和指针一起使用来读取数据,否则如果不需要,则使用 pre 代替后置增量。 一些编译器还提到避免在循环条件中使用后增量。
iLoop = 0

while (a[iLoop ++] != 0)
{
// Body statements
}

相关文章

在C语言中声明变量:变量声明仅在编译时向编译器提供以给定类...
全局变量和静态全局变量有不同的联系。 这就是全局变量可以在...
存储类决定程序中变量或函数的范围(生命周期)和范围(可见性)...
在C语言中,外部静态变量有内部链接,内部静态变量没有链接。...
让我们先来看一下 typedef 和宏的简短描述,以了解它们之间的...
编译器错误。 解释:typedef 已被视为部分存储类,因此不能一...