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

C語言核心要點速查:關鍵字、預處理、指針數組、內存對齊

     編輯:關於C語言

一、關鍵字精華

static

  • 修飾局部變量:靜態存儲,生命周期延長,僅初始化一次。
  • 修飾全局變量/函數:內部鏈接,僅本文件可見。

sizeof

編譯期運算符,非函數。sizeof(int) 需括號,sizeof x 變量可無括號。

const

  • 必須初始化;編譯器多放入符號表,不分配內存,效率高。
  • 指針組合:const int *p (值不可變)、int *const p (指針不可變)、const int *const p (雙不可變)。
  • 函數參數 const int i 防止誤改。

extern

聲明外部符號定義在別處,跨文件共享變量/函數。

struct vs class

struct 成員默認 public,class 默認 private;空結構體大小為 1 字節。

union

成員共享內存,大小等於最大成員;同一時刻只存一個值。

typedef

類型別名,簡化聲明(如 typedef int (*PF)(int,int);)。

二、預處理

#if / #else / #elif / #endif

條件編譯,構建編譯選擇階梯。

#define 宏定義

原樣替換,務必加括號:

[cpp]
#define SQR(x) ((x)*(x)) // 正確
#define SQR(x) x*x       // 錯誤:SQR(1+1) → 1+1*1+1 = 3

三、指針與數組

數組名左值/右值

  • 右值:退化為首元素地址(a == &a[0])。
  • 左值:不可賦值,a = p 錯誤。
  • &a 是數組指針(int (*)[N]),&a+1 跨越整個數組。

跨文件聲明陷阱


// file1.c
char a[100];
// file2.c
extern char *a; // 錯誤!應為 extern char a[]; 或 extern char a[100];

數組與指針本質不同:數組即內存塊,指針存地址;混用導致訪問錯誤地址。

函數參數退化

一維數組參數總是退化為指針:void f(int a[]) ≡ void f(int *a);二維數組保留第二維:void f(int a[][N])。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved