新手求教C語言,關於printf函式的問題

2022-12-26 19:40:50 字數 4073 閱讀 1600

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位長的二進位制數,在...