ssd上一道題目引發的思考

鴨脖發表於2012-11-08

+++++++++++++++++++++++++++++++++++++++++++++++++

void callee(int * count) {
    count++;
}
int main (int argc, char *argv[]) {
    int count = 4;
    callee(&count);
    printf("%d", count);
    return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++

int callee(int * count) {
    count++;
    return *count;
}
int main (int argc, char *argv[]) {
    int count = 4;
    int retval;
    retval = callee(&count);
    printf("%d", retval);
    return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

void callee(int * count) {
    (*count)++;
}
int main (int argc, char *argv[]) {
    int count = 4;
    callee(&count);
    printf("%d", count);
    return 0;
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++

上述三段程式的列印結果各是什麼呢?

第一個,是4

第二個,不確定

第三個,是5



其實這裡涉及的問題主要有兩個,一個是指標引數的問題,一個是傳參方式的問題。第一段由於傳入的是count的地址的拷貝,那麼拷貝的值變了但是儲存在count裡的那個地址並沒有改變,所以拿出來之後還是4

第二個就不同了,改變了拷貝的值,但是返回的是拷貝下一個地址的內容,所以返回的內容就不確定啦

第三個相當於傳引用。


void callee(int & count) {
    count++;
}
int main (int argc, char *argv[]) {
    int count = 4;
    callee(count);
    printf("%d", count);
    return 0;
}



所以在涉及指標傳參的情況的時候一定要弄清楚再做結論。















相關文章