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

C 語言大括號、中括號、小括號使用時機完整指南

     編輯:C 語言問答

三大括號核心功能對比

符號名稱核心用途關鍵規則
{ }大括號 / 花括號複合語句 / 區塊、結構體/聯合/列舉定義、初始化列表定義作用域;變數生命週期限於區塊內;if/for/while 單句可省略,多句必加
( )小括號 / 圓括號運算式分組/優先級覆蓋、函數聲明/定義/調用參數列表、if/while/switch 條件、類型轉換、sizeof 類型操作數改變運算優先順序;函數調用必須加 () 即使無參數
[ ]中括號 / 方括號陣列下標存取、陣列宣告大小、可變長度陣列 (VLA)、屬性標記 (C23 [[attr]])arr[i] 等價於 *(arr+i);下標從 0 起;宣告時必須是常數表達式 (VLA 除外)

詳細使用場景與範例

1. 大括號 { } —— 作用域與初始化


// 1.1 複合語句 (控制流程主體)
if (x > 0) {
    int y = x * 2; // y 僅在此區塊可見
    printf("%d\n", y);
} // y 此處銷毀

// 1.2 函數體
int add(int a, int b) { return a + b; }

// 1.3 結構體/聯合/列舉定義
struct Point { int x; int y; }; // 結尾需分號

// 1.4 初始化列表 (C99 指定初始化器)
int arr[5] = { [0] = 10, [4] = 20 }; // 其餘為 0
struct Point p = { .x = 1, .y = 2 };

2. 小括號 ( ) —— 分組與函數


// 2.1 運算優先級覆蓋
int a = (2 + 3) * 4; // 20,非 2 + 12 = 14

// 2.2 函數聲明/定義/調用
void func(void);      // 宣告
void func(void) { }   // 定義
func();               // 調用 (必須有括號)

// 2.3 條件判斷
if (a > 0 && (b < 10 || c == 0)) { ... }

// 2.4 強制類型轉換
double d = 3.14;
int i = (int)d; // 截斷為 3

// 2.5 sizeof 類型操作數 (必須加括號)
size_t s = sizeof(int); // sizeof 變數可不加括號:sizeof d

3. 中括號 [ ] —— 陣列與指標運算


// 3.1 陣列宣告
int scores[100]; // 固定大小
int n = 10;
int vla[n]; // C99 VLA (運行時決定大小,棧上分配)

// 3.2 下標存取 (指標算術語法糖)
scores[0] = 100;    // *(scores + 0)
int *p = scores;
p[5] = 90;          // *(p + 5) 合法

// 3.3 多維陣列
int matrix[3][4];
matrix[1][2] = 5; // *(*(matrix + 1) + 2)

易混淆陷阱

  1. 函數指標聲明:int (*fp)(int, int); — *fp 被 () 包圍,表示 fp 是指標,指向函數。少括號 int *fp(int, int); 變成函數宣告 (回傳 int*)。
  2. 巨集參數括號:#define SQUARE(x) ((x)*(x)) — 參數與整體必須加括號,防 SQUARE(a+b) 展開錯誤。
  3. 複合字面量 (C99):(int[]){1,2,3} — 類型名用 () 包圍,初始化用 {},建立臨時陣列。

總結口訣

  • 大括號:圈地自萌 (作用域)、建房子 (結構體)、裝箱子 (初始化)。
  • 小括號:改優先級、傳參數、叫函數、轉類型、問大小。
  • 中括號:取元素、定長度、指標算術寫得爽。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved