1樓:伊·梵
這個和編譯器自身處理過程有關係,不同的編譯器,結果不盡相同,不必過於糾結。
比如a = (++a) + (++a) + (++a);
有些編譯器會先計算右邊,最後賦值給a:++a;++a;++a;a=a+a+a;
有些編譯器實際的過程變成:a=++a; a=a+(++a);a=a+(++a);
有些編譯器實際的過程變成:a=(++a)+(++a); a=a+(++a);
有些編譯器實際的過程變成:a=(++a); a=a+((++a)+(++a));
2樓:
3.2 使用我的編譯器,下面的**int i=7; printf("%d\n", i++ *
i++); 返回49?不管按什麼順序計算, 難道不該列印出56嗎?
儘管字尾自加和字尾自減操作符++和--在輸出其舊值之後才會執行運算,
但這裡的「之後」常常被誤解。沒有任何保證確保自增或自減會在輸出變數原值之
後和對表示式的其它部分進行計算之前立即進行。也不能保證變數的更新會在表
達式「完成」 (按照ansi c的術語, 在下一個「序列點」之前, 參見問題3.7)之前
的某個時刻進行。本例中, 編譯器選擇使用變數的舊值相乘以後再對二者進行自
增運算。
包含多個不確定的***的**的行為總是被認為未定義。(簡單而言, 「多
個不確定***」是指在同一個表示式中使用導致同一物件修改兩次或修改以後
又被引用的自增, 自減和賦值操作符的任何組合。這是一個粗略的定義; 嚴格的定
義參見問題3.7, 「未定義」的含義參見問題11.32。) 甚至都不要試圖**這些東
西在你的編譯器中是如何實現的(這與許多c教科書上的弱智練習正好相反);正
如k&r明智地指出, 「如果你不知道它們在不同的機器上如何實現, 這樣的無知可
能恰恰會有助於保護你。」
3樓:賽車引擎
你看啊,m在執行這句**之前為0,前置++是在執行之間完成的,所以共執行兩次++運算,0自加兩次變成了2,所以這句**實際上執行的是a=2+2
c語言裡邊m++與++ m區別是啥,求形象解答,謝謝!
4樓:匿名使用者
若m=6;
a=m++;
則執行完該語句後a=6,m=7.(賦值運算取自加之前的值)若m=6;
a=++m;
則執行完該語句後a=7,m=7.(賦值運算取自加之後的值)如果單純有一行是
m++或者++m,沒有賦值或取值,那麼這兩句實際結果是一樣的,都是m的值增加了1
5樓:12我的
m++是先讓m進行加一操作,在使用m的值,例如m=5,a=m++,a就=6
6樓:
m++=m+1;++m=1+m
7樓:酆蓉魯雲淡
我說下吧:
比如:如果m=9的話.那麼:
n=m++
的結果就是:n=9
m=10
n=++m
的結果就是:n=10
m=10了
再看下助理的,就是這意思了
c語言中表示式a*=m--是什麼意思
8樓:匿名使用者
把a*m的結果給a,然後m自減1
比如a =2, m=3
計算完之後,a就是6(2*3),m是2,計算完自減了1
9樓:匿名使用者
a*=m--;
a = a * (m--);
如果 a = 5, m = 6 那麼
a*=m--; ---> a = a*(m--) --->a = 5*6 ----> a = 30 and m = 5
c語言中m+=i++表示什麼意思
10樓:天雲一號
m+=i++ 這是賦值運算子與自增運算子的綜合使用,該表示式等價於如下2條表示式:
m = m + i;
i++;
如果表示式換成m+=++i,則改表示式等價於:
i++;
m = m + i;
// 因為是++i,所以i的值需要先進行加1,之後再參與表示式的運算;而i++是先將i的值代入表示式計算,表示式計算完後,i的值再加1
11樓:吳少春
表示 m=m+(i++),注意的是,假如m的初始化為2,i的初始化為3,則m+=i++之後,m=5,i=4。
12樓:匿名使用者
a+=b 表示 a=a+b;而這裡面b是i++,這就看著貌似有點麻煩,其實很簡單
首先++表示自增 即i++等價於i=i+1;
但是有順序的,即 i++是先用i,然後再++;++i是先++在用i;
比如你這個例子:m+=i++; 就是先用i,然後在i++這樣一來,就相當於兩個語句: m+=i;(或者寫成m=m+i)i++;(或者寫成i=i+1,這裡只有一個i++,就無所謂++在前或是在後了)
13樓:匿名使用者
i++表示i自增,即i=i+1;
j++=2 有兩個運算子++ 和= 這兩個運算子都是右結合的,所以先賦值j=2 然後j++ j的值變為3
14樓:
i++表示先引用i的值,再使i的值加1,i++當成右值看待(i++=3,這個錯誤)。j++同理
++表示先使i的值加,再引用i的值,++i當成左值看待(++i=3,這個正確)。++j同理
15樓:匿名使用者
抱歉,三樓的不對,四樓的同意錯了!
確實是m=m+i,i=i+1
請注意i++是i先參加運算,然後才加1,這是關係一定要搞清楚!
16樓:智遴
舉個例子吧,假設i=2,m=3,則m+=i++是先進行i++,再進行m=m+(i++),此時i=3,m=5.
17樓:匿名使用者
m=m+i;
i=i+1;
謝謝採納
18樓:
m=m+i;
i=i+1;
19樓:匿名使用者
注意順序
i=i+1;
m=m+i;
20樓:匿名使用者
i=i+1;
m=m+i;
同意三樓的
c語言中!10的值為0,為什麼,c語言中a 1 0 的值是什麼
ch陳先生 計算機記憶體儲存的時候認為規定了,只有0,沒有 0。c語言是一門程序導向的 抽象化的通用程式設計語言,廣泛應用於底層開發。c語言之所以命名為c,是因為c語言源自kenthompson發明的b語言,而b語言則源自bcpl語言。1967年,劍橋大學的martinrichards對cpl語言進...
c語言中 e什麼意思,c語言中,E! 0和!E 0各是什麼意思
宦泰然公靖 c語言 e的意思是 以指數形式輸出實數。指標的值是語言實現 編譯程式 相關的,但幾乎所有實現中,指標的值都是一個表示地址空間中某個儲存器單元的整數。printf函式族中對於 p一般以十六進位制整數方式輸出指標的值,附加字首0x。示例 inti 1 printf p i 相當於inti 1...
c語言中如何生成0到1的隨機數,c語言中如何生成1個0到1的隨機數
八哥說科技 c語言中生成1個0到1的隨機數可以執行語句 float b rand rand max 1.0 解析 標準c庫中函式rand 可以生成0 rand max之間的一個隨機數,其中rand max 是stdlib.h 中定義的一個整數,它與系統有關。rand 函式沒有輸入引數,直接通過表示式...