首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 指針函數參數與非指針實參:傳遞變量地址匹配指針形參

     編輯:程式設計綜合問答

代碼分析


int* min(int a, int b, int c) {  // 形參為值傳遞,返回局部變量地址 → 懸空指針
    int *p = 0;
    if (a < b) p = &a; else p = &b;
    if (*p > c) p = &c;
    return p;  // 返回棧上局部變量地址,函數返回後無效
}

嚴重錯誤

函數返回**局部變量地址**(`a`、`b`、`c`、`p` 均在棧上),調用者解引用導致未定義行為。

正確設計

方案一:返回值(推薦)


int min(int a, int b, int c) {
    int m = a < b ? a : b;
    return m < c ? m : c;
}

方案二:輸出參數(指針/引用)


void min(int a, int b, int c, int* out) {
    int m = a < b ? a : b;
    *out = m < c ? m : c;
}
// 調用
int result; min(a,b,c,&result);

方案三:引用參數(C++ 風格)


void min(int a, int b, int c, int& out) { ... }
min(a,b,c,result);

指針形參用法

  • 調用時傳**變量地址**:`func(&var)`。
  • 函數內解引用修改:`*ptr = newVal;`。
  • **不可**返回局部變量地址。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved