ssd上一道題目引發的思考
+++++++++++++++++++++++++++++++++++++++++++++++++
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;
}
所以在涉及指標傳參的情況的時候一定要弄清楚再做結論。
相關文章
- 一道面試題目引發的思考面試題
- 一道簡單的題目引發的思考
- 一道題引發的EventLoop思考OOP
- 一道排序題引發的思考排序
- 一道面試題引發的思考面試題
- 一道 JS 面試題引發的思考JS面試題
- 一道賦值面試題引發的思考賦值面試題
- 一道數學題引發的思考薦
- 一道單連結串列題引發的思考
- 一道面試題引發的思考:理解 new 運算子面試題
- Node.js 啟動方式:一道關於全域性變數的題目引發的思考Node.js變數
- Node.js 啟動方式:一道關於全域性變數的題目引發的思考·續Node.js變數
- 一道面試題引發的對 javascript 型別轉換的思考面試題JavaScript型別
- 一道面試題引發的js資料型別傳參思考面試題JS資料型別
- 一道“史上最難”java面試題引發的執行緒安全思考Java面試題執行緒
- 一道面試題引發的“血案”面試題
- 一道setTimeout async promise執行順序的筆試題引發的思考Promise筆試
- 一道面試題引起的思考面試題
- 一道無聊的題目
- 記一個面試題引發的思考面試題
- 一道前端面試題引發的學習前端面試題
- 一道騷面試題目面試題
- 【死磕JVM】一道面試題引發的“棧幀”!!!JVM面試題
- for...in引發的思考
- 一道小小的題目引發對javascript支援正規表示式相關方法的探討JavaScript
- 論一道面試題引起的思考(總結)面試題
- 關於一道前端筆試題的思考前端筆試
- 一道java面試題分析及思考Java面試題
- 一道文字處理題目的思考
- 從一道前端面試題引發的原理性探究前端面試題
- 電梯引發的思考
- order by limit 引發的思考MIT
- 一道Js判斷物件是否相等面試題引發的故事JS物件面試題
- 一個延時任務問題引發的思考
- 一次線上問題排查所引發的思考
- Temporary failure in name resolution - DNS引發的問題和思考AIDNS
- 分享一道有趣的 Leetcode 題目LeetCode
- bugku一道逆向題目分析