1樓:匿名使用者
答案是:24的。a最終的值變成8,最後才計算q的值,所以= 24
2樓:匿名使用者
編譯器是這麼運作的
1、 把 ++a 和 ++a 入棧、入棧時經行計算,對a+2、也就是執行兩次++a,然後a = 7;
2、 把a的值放入cpu暫存器,同時 + 入棧(這個可能時間上有誤差),再放入暫存器。
3、 cpu計算 a+a = 14;
4、 把++a 、+ 入棧,入棧時經行計算 ++a ,a = 8;
5,、放入暫存器eax、ebx啥的、這個要看彙編了,原來的結果假設在eax, eax = 14,
後面a假設在ebx, ebx = 8;
6、 cpu計算 ebx + eax = 22;
簡單的解釋了下,更細的要看彙編,以及cpu結構,最好再看下c的編譯器原理。
3樓:匿名使用者
答案應該是24才對啊,怎麼會是22呢,變數前置的自增運算可以看成是先自增後執行當前運算,所以該式子等價於 :
++a;
++a;
++a;
q = a + a + a;
也就是24了
4樓:匿名使用者
第一個++a結束,a=6, q=6
第二個++a結束,a=7, q=7+7
第三個++a結束,a=8 ,q=14+8
按我理解,過程如下:
第一個加法,把結果存在了另外一個記憶體塊,然後由這個記憶體塊和最後一個++a作加法,所以最後一個自增沒有改變上一次加法所得的結果的記憶體的內容。畫個圖表示
5樓:
這種問題…… 真的不要去鑽牛角尖啊!第一個++a 加完之後a是6了 然後開始算第二個++a 這時候a是7了 兩個a相加是14了 然後第三個++a a==8了 然後14+8==?? 呵呵。
不要讓這樣的問題繞進去啊 不要認為括號如何如何的 你一定認為應該是所有的++a算完之後他們再相加是吧。但是你用的那個編譯器來看並不是這樣的。就算你把所有的括號都去掉也能得到22這個答案的。
本身++的優先順序就要高於+號的優先順序的! 這個你要問我原理了是不是,這種程式是要避免的,這是一種未定義的行為,再不同的編譯器有可能是不同的理解方式也就是可能得到不同的答案。在c語言中這種答案應該是undefined。
至於什麼是undefined,這個你就自己去查資料吧 查一下side effect與sequence point 我想你就應該能夠明白了。所以說上面我說的那種計算過程只不過是你所用的編譯器採用的一種解釋方法。
C語言程式設計問題? 5,c語言程式設計問題
1 輸入有範圍,兩個變數輸入都需要驗證,方法變數處置範圍以外,迴圈判斷輸入。2 天數迴圈計數,日期0 6週期自增。用變數累加計數結果。下面是演示 printf 請輸入a的值 0 6 scanf d a while n 0 n 365 printf 請輸入n的值 0 365 scanf d n for...
c語言問題求大神解答,C語言問題,求大神解答
a 用結構體定義以下學生資訊,結構體名 student 學號 姓名和成績 包括3門課程的成績,可用一個陣列表示 struct student c語言問題,求大神解答! 奔安 include include include typedef unsigned int uint typedef struc...
C語言問題,求大神解決,c語言問題 求大神解決
馨兒 青衣 include include main printf the place is d n place printf shun xu is d d d d d n a,b,c,d,e printf ni xu si d d d d d n e,d,c,b,a return 0 已經改過,你...