查看完整版本: 關於++ --以及函數問題 (已解決)
頁: [1]

在那裡 發表於 2018-9-18 04:21 PM

關於++ --以及函數問題 (已解決)

本帖最後由 在那裡 於 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>

jackyo04 發表於 2018-9-18 04:59 PM

C語言的原則,也是我一開始遇過的問題,前輩的回答是:先有雞還是先有蛋..
有時候為了方便會懶得去使用函數,也懶得去宣告..但C語言沒有那麼聰明XD
別為了一時方便而沒去宣告,有些Bug就是因為這些原因而產生的...
我之前也常遇到,改過這個習慣後就不會有這個問題了

advantise 發表於 2018-9-18 06:28 PM

這個是stack overflow, 你宣告 Stack , 但是 ++top, 已經變成4, 超過範圍了, 而你宣告int a, b去接值時, 在stack又多宣告了2個int的位置, 所以用++top後你的stack會用到a或b的位置, 你可以把a, b的值print出來, 就知道了。

在那裡 發表於 2018-9-18 06:50 PM

也就是說,程式是先進行Stack[++top]左邊的式子,而非先進行count(Stack,Stack,'-')右邊的式子囉?那大概懂了。

嗯......還是不要使用這種模糊的運算式好了@A@
謝謝~

z1090128 發表於 2018-9-25 09:20 PM

top的初始位置是3,也是你矩陣最大的那個位置,在你使用++top時就超出了矩陣的大小了<br><br><br><br><br><div></div>

johnwanz 發表於 2018-9-26 09:13 AM

簡單說, 單一行敘述句內, 同時對一個變數, 又++又--, 有超過一次的賦值動作, 印象裡, 這在標準上是屬於未定義行為, 故不同編譯器可能產生不同的結果. 即便恰好得到了想要的結果, 也只能說是運氣.

基本上, 應避免在同一敘述句內, 同時有多次的++/--. 寫程式應該要靠邏輯, 而不是運氣.
頁: [1]