++i 和 i++ 有什么区别呢?在内存中具体是怎样实现的呢?问题的抛出源于下面这段代码。
Input:
#include <stdio.h>
int main()
{
int a = 0;
printf("a++ = %d\n",a++);
a = 0;
printf("++a = %d\n",++a);
return 0;
}
Output:
a++ = 0
++a = 1
结论:前缀++是先增加i的值,再返回i的拷贝作为右值;
后缀++是先返回i的拷贝作为右值,然后增加i的值。
++i和i++哪个速度较快呢(编译器不优化的情况下)?在C++ Primer 4th整本书中,都是用++i,我今天特别跑去问C++老师为什么,答案是因为++i较快,所以C++ Primer才都使用++i。
/* ++i相当于 */
i = i + 1 ;
return i;
/* 而i++相当于 */
int j = i;
i = i + 1 ;
return j;
这里的关键在与++操作产生了一份拷贝,具体是如何实现的呢?请见下文!
注意这里的cp的数据类型是指针!!!cp的值是另一个变量的地址值,cp的箭头指向代表cp的所指的变量!!!
这里我们结合指针说明以下:(from Pointers on C)
这里的关键在与++操作产生了一份拷贝。
下面的不常用,但有助于提高认识:
案例:int strlen(char * string);