1樓:匿名使用者
ls的同學啊,不要為了湊答案,胡亂解釋啊
第一++a,5*a,a++,++a 這個根本不是逗號表示式,甚至都不是表示式,是表列
第二,逗號表示式是有順序點的,而且計算順序是從左至右
這道題和函式呼叫約定以及順序點有關,c預設的呼叫約定是_cdecl,引數是自由向左依次入棧的
而此處只有乙個順序點,編譯器只保證順序點間的***均發生,所以在不同編譯器下,不同編譯選項下,結果都會不同,結果是未定義的
該句在vc6debug模式下,反彙編結果
5: printf("%d %d %d %d",++a,5*a,a++,++a);
0040102f mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax
00401038 mov ecx,dword ptr [ebp-4]
0040103b push ecx
0040103c mov edx,dword ptr [ebp-4]
0040103f mov dword ptr [ebp-8],edx
00401042 mov eax,dword ptr [ebp-8]
00401045 push eax
00401046 mov ecx,dword ptr [ebp-4]
00401049 imul ecx,ecx,5
0040104c push ecx
0040104d mov edx,dword ptr [ebp-4]
00401050 add edx,1
00401053 mov dword ptr [ebp-4],edx
00401056 mov eax,dword ptr [ebp-4]
00401059 push eax
0040105a push offset string "%d %d %d %d" (00426010)
0040105f mov ecx,dword ptr [ebp-4]
00401062 add ecx,1
00401065 mov dword ptr [ebp-4],ecx
00401068 call printf (00401220)
0040106d add esp,14h
最後,講一下,lz沒有必要糾結這種未定義的結果的題目,沒有意義,越糾結越痛苦的
2樓:匿名使用者
我在螢幕上顯示為:
3 10 2 2
環境為:winxp+vc6.0
對於我的結果解釋:
逗號表示式,計算順序為從右到左。
1.計算最右邊的 ++a ,顯示為 2 (a++為先把a加1,再顯示)
2.計算a++ ,顯示為 2 (a++是在整個表示式完成後,才加1)
3.計算 5*a ,顯示為 10 (此時a仍為2)4.計算最左邊的 ++a ,顯示為3 ,(a++為先把a加1,再顯示)
希望對你有幫助
問個有關printf的c語言問題?
3樓:自我程式設計
題目寫錯了,第二個printf就乙個引數,應該填c2。這題本意是告訴你字元有2種表示方式,乙個是字元,乙個是數值(ascii碼),比如65就是字元'a'。
c語言的問題,新手求教 printf(『『\*』』);的『『*』』前為什麼要加\,如果不加會怎麼樣
4樓:金色潛鳥
printf("\*"); 是錯誤的,反斜槓是轉義的意思, 沒有 \* 這樣的 轉義字元。
編譯器可能處理成: printf("*"); 並給警告錯誤資訊。
是不是想用 printf("/*"); 除號星號,斜槓用 錯字元了?
for (i=0;i<10;i++) printf("/*"); 輸出: /*/*/*/*/*/*/*/*/*/*
5樓:
你定義的這個函式什麼功能
c語言 新手求助 關於printf函式與後置運算的問題 如圖 為何第二幅圖最後一行說有兩個後
6樓:月光大帝
這東西只能說是++在前與++在後了
在前的話就是先自增,再把它進行輸出啊,呼叫啊什麼的
而在後就是先進行操作,再把它自增
求教c語言輸出函式printf的問題
請教乙個c語言的問題,關於printf函式
7樓:慕桖以南
我覺得 第一段輸出為 5, 7, 11;
理由是 x++, 和 ++x 所產生的***都是一樣的,即加一,區別在於 前者為先用後加,後者為先加後用.
而他們的***什麼時候才算產生?就是要在";"號之前產生,即完成 前++或者後++運算.";"順序點
再具體,順序點之前 ++什麼時候完成運算?c規範裡沒定,所以編譯器不同,效果不同.
8樓:smile_大笑
a++是先賦值後加1,而++a是先加1然後再賦值。
例如:int a=5,b=5,c,d;'
c=a++;
d=++b;
printf("%d,%d\n",c,d);
結果為:5,6
9樓:匿名使用者
第一步是輸出的5,7,11
第二部輸出c=7;
你可以試試
a++是後置增,a++的整體不變,若a=1,則a++為1,但a卻變成了了2;
++a是前置增,++a的整體加一,同時a也加一,若a=1,++a則a為2,但a也變成了了2;
這與printf無關的。
10樓:王磊
其實,a++和++a屬於單目運算子,在單語句時是沒有區別的!例如:題中的單語句a++,++b就是6和7。
但是類似c=a+++b這種表示式時就有區別啦!所以如果輸出表示式形式:int d,e;........
printf("%d,%d,%d\n",d=a++,e=++b);那麼d=a++輸出就是d=5,e=++b就是e=7。
乙個關於c語言 printf裡輸出順序的問題
11樓:匿名使用者
從右至左
先輸出最右邊的i++,此時i為0,輸出0,i變成1之後輸出中間的++i,此時i為2,輸出2
最後輸出最左邊的i+1,為3
12樓:匿名使用者
c99 6.5.2.
2 function calls 10.the order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.
13樓:匿名使用者
i++,++i, i+1
c語言的printf函式的簡單問題 其中第乙個printf為什麼是%2d?而不是%d
14樓:穿楊百步
%2d表示佔兩位,%nd表示佔n位
%5.1f表示佔5位且小數點後留一位
15樓:袁世平
為了好看.
printf("%2d",x);
表示若x不滿2位,會在x的前面補空格....
c語言 選擇 求教 關於指標,C語言 選擇 求教 關於指標
樓上說的不對,變數宣告了當然是可以取位址的,是可以用 的,1 是錯的是因為int a,p,q,p q a p q a前面是個逗號,也就是說,先宣告int p,後面又宣告 int p,也就是將變數p宣告了兩次不同型別,所以是不對的,4 是對的,所以選d 好吧,我說的樓上樓上。全部都是錯的,這一點是完全...
求教基礎c語言,求教基礎C語言
前加 i i i 1 先自加在參與運算 如 i 1 c i 先 i i 2 再c i 最後c 2 後加 i i i 1 先參與運算 後自加如 i 1 c i 先將c i c 1 再i自加1 i 2 和 一樣 na1 10 nb1 na1 na1 na1 這個na1 先na1參與運算 nb1 na1 ...
c語言新手求助,C語言程式設計 新手求助
因為 中用錯了輸出控制符,應該將printf f n num 中的 f改成 d才是。此程式中,已定義num為整型變數,而在後面的printf 輸出時,型別被描述為浮點數 f 這樣寫法是有問題的。c語言中,整型變數和浮點型變數在記憶體中的存放格式是不一樣的。整型變數表示的是乙個16位長的二進位制數,在...