关于递增(++)/递减(--)运算符
记得几天前看到过一个帖子,是关于++运算符的. 大致是对于:
a = *p++; a = *p(++);
这样2个语句的运行结果是一样的,感到不理解.
今天比较闲,想发个帖子讨论下这个.
只要你看过几本关于C或者C++的书,上面都会对++,--这2个运算符介绍下,你多多少少会知道它们的意思和用法. 书上会告诉你: 前置的++是先加,然后取出,后置的++是先取出,然后递加. 之后一般会有一两个例子,告诉你怎么用.
但更高级一点的例子就没有了. 你如果曾经写过向下面的程序: int i; ++++i; //ok i++++; //不能通过编译 一般的书上就找不到答案了.顶多告诉你不能那么做.至于为什么不能那么做,没有答案.
你说你不打算知道这些,你就只要知道"先加后取数","先取数后加"的概念就可以了,你不需要编那些代码. 但你总有需要看别人代码的时候,说不定就有那些语句, 不是?
以下是一些测试题目:
假设下面的变量是如下声明的. int i = 9; int ar[] = {1, 2, 3, 4}; int * p = ar; int f(int x) {return x};
那么以下语句是否正确?能否通过编译?为什么? 如果能通过编译,那么运行后的结果是什么?为什么?
1> i++++; 2> ++i++; 3> (++i)++; 4> ++i = 5; 5> i++ = 5; 6> i = *p++; 7> i = *(p++); 8> i = (*p)++; 9> i = ++f();
如果你能正确知道以上全部语句的结果,那么你才是真正理解了递增(++)/递减(--)运算符;
--------------- 待续 |