調用 printStudent(stu[i]) 時輸出正常;但若在函數調用**後**再賦值,輸出全為 0。
// 錯誤:按值傳遞結構體,產生副本
void printStudent(Student s) { ... }
// 主函數
printStudent(stu[i]); // 此時 stu[i] 尚未賦值,副本全為 0
stu[i] = inputStudent(); // 隨後賦值,但已錯過輸出時機
參數 i 傳遞無誤,問題在於 **函數調用順序** 與 **值傳遞語義**:調用瞬間結構體尚未初始化,副本捕獲了垃圾值/零值。
void printStudent(const Student& s) { ... } // 無拷買,見真實數據
// 或
void printStudent(const Student* s) { ... }
-Wuninitialized 可捕獲「使用未初始化變量」。print() 作為成員函數直接訪問 this,根除傳參問題。