siii 為什麼等於,s i i i 為什麼等於

2022-12-19 06:25:45 字數 2925 閱讀 6816

1樓:匿名使用者

這不是標準答案(你更沒有說出i的初始值到底是多少),不同的編譯器對此可以有不同的結果。c語言標準並沒有對在何時自增進行規定:是在計算開始前先自增3次,還是每次使用前自增?

即使同一程式,同一個編譯器也會有不同的結果。比如程式i=0;

printf("%d", (++i)+(++i)+(++i) );

i=0;

s=(++i)+(++i)+(++i);

printf("%d", s);

在borland c++ 5.5下,給出的結果就是不一樣的。

若i=5,(++i)+(++i)+(++i)的值為什麼是22,而不是21?

2樓:匿名使用者

先從簡單的說起吧,也就是i=5,s=(++i)+(++i);這個結果應該等於14而不是13,為什麼呢?看一下下面的彙編**(通過生成exe反彙編得到)(其中-4ebp是變數i在堆疊中地址,-8ebp是s的地址,eax是暫存器ax) movl $5, -4(%ebp) ;將i賦值為5 leal -4(%ebp), %eax;取i的地址到ax incl (%eax) ;將i自增1,此時i為6 leal -4(%ebp), %eax;再取i的地址到ax incl (%eax) ;再將i自增1,此時i為7 movl -4(%ebp), %eax;將i值放入ax addl -4(%ebp), %eax;將i值與ax中值相加,得到7+7=14 movl %eax, -8(%ebp);將14放入s中 通過上面的彙編**分析得,先做完兩次自增之後,然後將i空間內的值相加,也就是兩個7相加..同理可分析此題的彙編**,如下 movl $5, -4(%ebp) ;將i賦值為5 leal -4(%ebp), %eax;取i地址到ax incl (%eax) ;將i自增1,此時i為6 leal -4(%ebp), %eax;再取i地址到ax incl (%eax) ;i自增1,此時i為7 movl -4(%ebp), %eax;將i值放入ax movl -4(%ebp), %edx;將i值放入dx addl %eax, %edx ;將ax與dx相加,並放入dx此時dx=7+7=14 leal -4(%ebp), %eax;取i地址放入ax incl (%eax) ;i自增1,此時i=8 movl %edx, %eax ;將dx中值放入ax 此時ax=14 addl -4(%ebp), %eax;將ax中值與i相加,得ax=8+14=22 movl %eax, -8(%ebp);將結果ax=22放入變數s中 由於反彙編得到的彙編**太長,所以只選取了其中能解決問題的一段解釋,其它的大家可以自己在debug下反彙編,然後研究一下**,就知道編譯器是怎麼做的了...

注:此彙編**是用gcc得到,其它編譯器做法可能不同,結果可能會有差異

為什麼int i=5 p=(++i)+(++i)+(++i)=22?

3樓:匿名使用者

(++i)+(++i)+(++i) 這種題根據不同的編譯器會有不同的結果。一般來說,結果是不固定的,有可能是22,也有可能是23。

但大多數編譯器的結果會是 22。分析如下

先計算 前面的 (++i)+(++i),這裡會先做兩個++i,得到i的值是7,然後再相加,結果為14。

然後再做 14+(++i),在第一步i是7,現在i要變成8,然後再相加,結果是22

4樓:獨白

在一個式子中對同一個變數用多個字首或字尾++會發生意想不到的混亂。我們所學的課本上有一個類似的例子:

int a=2;int b=++a + ++a;

b的值為8是4+4而不是3+4=7;

換到這裡合理的解釋就是

p=(++i)+(++i)+(++i)

分為兩步(++i)+(++i)的結果是14(i的值是7),再去加上後面的8那麼就是22了(i就為8了)

i=3; s=(++i)+(++i)+(++i); 請問s等於多少,i等於多少? c語言自增運算

5樓:風若遠去何人留

在同一個表示式中對相同變數採用多次自加操作,在c語言中屬於未定義行為.

也就是公認的c規範對此沒規定,由各個編譯器自行實現.

目前比較常見的一種運算規則是這樣的:

加法左結合,所以這裡可以分成兩步,第一步

(++i)+(++i) 提取i的時候, 先做兩次自加,於是i自加為5. 這個結果是5+5=10

下一步 是10+(++i) i值先自加為6, 結果為16,最後賦值 s=16

i最終值為6.

在不同編譯器下,i值均會是6,但s值是有可能不同的.

c語言中 *(s+i)和s[i]一樣嗎

6樓:逆風

一樣的,你記住一條就好了:s+i=&s[i],等式兩邊同時進行*運算,得到*(s+i)=s[i]

c語言中s*=*(p+i)是啥意思?

7樓:夢想——起航

表示式中p應該是個指標,指向一個陣列,如a[10]陣列a的首地址傳輸給指標p,*(p+i)就是陣列的第i個元素a[i]。

表示式「s*=」就是s=s*()

於是,該表示式即為s=s*(*(p+i))也就是s=s*a[i]

表示式中第一個「*」是乘法運算

第二個「*」是指標運算子。

8樓:匿名使用者

s*=*(p+i);

s=s*(*(p+i));

第一個*是乘法運算,第二個*是取指標指向地址中的值的操作。

例如:int *p;

p=new int[4];

*p=1;

*(p+1)=2;

int i=1;

int s=2;

s*=*(p+i);//s=4

9樓:土杜土杜

等價於:s = s * (*(p + i));

1 1為什么等於,1 1為什麼等於

2定義即為1 1 現代漢語字典對2的定義為1 1的結果 2是一種語言,表示的1與1相加後的狀態。它的實質就是1 1。所以這個問題不能算問題。從純數學的角度出發,在現代的精密科學中,特別在數學和數理邏輯中,廣泛地運用著公理法。什麼叫公理法呢?從某一科學的許多原理中,分出一部分最基本的概念和命題,對這些...

1 1為什么等於,1 1為什麼等於

糾正一下 計數法分二進位制和十進位制 1 1 2是十進位制 1 1 10是二進位制 謝謝.1 1為什麼等於2?1 1 2 是初等數學範圍內的數值計算等式。當某個原始人第一個意識到1 1 2,進而認識到兩個數相加得到另一個確定的數時,這一刻是人類文明的偉大時刻,因為他發現了一個非常重要的性質 可加性。...

為什么她要變壞。。為什么,為什麼她要變壞。。為什麼!

家庭和學校的壓力所至,你女朋友只是把這種壓力用錯了方向,沒轉變成動力而已,你女朋友轉換成了逃避 你應該去勸他,用你的真心去感化他。我想,他知道她做的是不對的。雖然不是情侶,但還是朋友啊。好好勸勸他,相信自己,你能過救他於水火之中的 拉一幫好人和她交往。人不到傷痕壘壘就不會懂得後悔 無論怎樣,你可以默...