頁:
[1]
關於++ --以及函數問題 (已解決)
本帖最後由 在那裡 於 2018-9-18 06:50 PM 編輯小弟我在寫後續式運算時遇到了一個問題
程式碼如下:
#include <iostream>
using namespace std;
int count(int a,int b,char oper)
{
switch(oper)
{
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
case '%': return a%b;
default : return 0;
}
}
int main()
{
int Stack = {1,2,99,97};
int top = 3;
int a,b;
b = Stack;
a = Stack;
Stack[++top] = count(a,b,'-');
//Stack[++top] = count(Stack,Stack,'-');
cout << "top:" << top << endl;
for(int i=0;i<4;i++)
cout << "Stack[" << i << "]:" << Stack << endl;
return 0;
}
為什麼用b與a去操作就可以成功運作,而註解內的那一行就會產生錯誤結果呢?
to snowflying:痾 難道不是由右往左?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> C語言的原則,也是我一開始遇過的問題,前輩的回答是:先有雞還是先有蛋..
有時候為了方便會懶得去使用函數,也懶得去宣告..但C語言沒有那麼聰明XD
別為了一時方便而沒去宣告,有些Bug就是因為這些原因而產生的...
我之前也常遇到,改過這個習慣後就不會有這個問題了 這個是stack overflow, 你宣告 Stack , 但是 ++top, 已經變成4, 超過範圍了, 而你宣告int a, b去接值時, 在stack又多宣告了2個int的位置, 所以用++top後你的stack會用到a或b的位置, 你可以把a, b的值print出來, 就知道了。 也就是說,程式是先進行Stack[++top]左邊的式子,而非先進行count(Stack,Stack,'-')右邊的式子囉?那大概懂了。
嗯......還是不要使用這種模糊的運算式好了@A@
謝謝~ top的初始位置是3,也是你矩陣最大的那個位置,在你使用++top時就超出了矩陣的大小了<br><br><br><br><br><div></div> 簡單說, 單一行敘述句內, 同時對一個變數, 又++又--, 有超過一次的賦值動作, 印象裡, 這在標準上是屬於未定義行為, 故不同編譯器可能產生不同的結果. 即便恰好得到了想要的結果, 也只能說是運氣.
基本上, 應避免在同一敘述句內, 同時有多次的++/--. 寫程式應該要靠邏輯, 而不是運氣.
頁:
[1]