==【注意】== 程式語言隻是我們與計算機交流并讓計算機實作我們創造性思想的工具,可以并鼓勵深入掌握一門語言,但千萬别沉迷于鑽某種語言的牛角尖,一定要把握好二者間的度
本帖屬不定時連載貼,以試卷的形式提出一個比較基礎的問題供大家思考讨論,問題的解析将在下一更新貼中一并給出,這樣做是希望還不清楚問題的朋友有自己思考和讨論的時間,希望大家能從這些文章中有所收獲。
貼中問題屬我在學習C\C++過程中遇到的一些文法或者比較隐晦的程式問題,其中有自己的總結,也不乏網絡上搜尋到的經典解析,在此分享給大家,希望能起到抛磚引玉的作用
【No.3 typrdef與const指針】
由于連載形式,每帖第二部分都配有上一問題的解答。為了保持文章的針對性和一緻性,
複制内容到剪貼闆
<code>[問題 No.3]請給出變量 cpstr 的類型 typedef string * pstr; const pstr cpstr;</code>
<code>#define Sum(a,b) a+b int main(int argc, char **argv) { int x = Sum(1,2); int y = Sum(1,2) * Sum(1,2); return 0; }</code>
此陷阱就是抓住人們的主觀意念,認為Sum(1,2) * Sum(1,2)就是3*3 == 9,可關鍵在于宏定義#define隻是最最簡單的字元替換,也就是說還是要按部就班地來——
Sum(1,2) * Sum(1,2) → 1 + 2 * 1 + 2 → 由操作符的優先級可知左式等于 1 + 2 + 2 = 5
是以答案為 x == 3, y == 5
本文轉自Bill_Hoo 51CTO部落格,原文連結:http://blog.51cto.com/billhoo/733256,如需轉載請自行聯系原作者