C 語言結構體成員變數可否與函數區域變數同名?
結論:完全合法,無衝突
#include <stdio.h>
struct Point {
int x;
int y;
};
int main() {
int x = 100; // 區域變數 x
struct Point p = {10, 20};
printf("區域變數 x = %d\n", x); // 100
printf("結構體成員 p.x = %d\n", p.x); // 10
printf("結構體成員 p.y = %d\n", p.y); // 20
// 甚至可以同名成員在不同結構體
struct Other { int x; };
struct Other o = {999};
printf("Other.x = %d\n", o.x); // 999
return 0;
}
作用域與名稱空間規則
| 名稱空間 | 範例 | 存取方式 |
| 標籤名稱空間 | struct Point | 結構體標籤 |
| 成員名稱空間 | x (在 Point 內) | 必須透過 p.x 或 ptr->x 存取 |
| 一般識別符空間 | x (區域變數) | 直接使用 x |
關鍵規則
- 結構體成員名稱**各自獨立**,不同結構體可有同名成員。
- 成員名稱與區域/全域變數**不同名稱空間**,不衝突。
- 存取成員**必須**使用
. (物件) 或 -> (指標),編譯器據此解析。
- 同一結構體內成員名稱**不可重複**。
實務建議
- 雖然合法,但為可讀性建議避免同名 (如區域變數用
localX、成員用 x)
- 大型專案可採用命名慣例:成員加前綴
m_x、m_y (Google C++ 風格) 或 x_ (LLVM 風格)
- 巢狀結構體時更需注意:
outer.inner.x 清楚指向哪個 x
- 上一篇文章: C語言語法解析:x:=a+x 在 Pascal 中的含義而非 C
- 下一篇文章: C語言 double 型別詳細說明:浮點數儲存與精度特性
Copyright ©
程式碼之家 All Rights Reserved