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

C 語言核心基礎速查:資料表示、類型、指標與記憶體模型

     編輯:C 語言入門

一、有號整數的三碼表示(僅針對負數)

  • 原碼:符號位 + 絕對值二進制
  • 反碼:符號位不變,其餘位取反
  • 補碼:反碼 + 1 —— 計算機實際儲存與運算使用補碼

正數三碼相同。補碼設計使減法變加法,統一運算邏輯。

二、基本資料類型大小對照(32 位系統)

類型C (bytes)Java (bytes)
char12 (Unicode)
short22
int44
long48
long long8-
float44
double88

C 語言可用 sizeof(type) 編譯期獲取大小。

三、有號 vs 無號

  • signed int(預設):最高位為符號位,範圍 -2^31 ~ 2^31-1
  • unsigned int:全 32 位表數值,範圍 0 ~ 2^32-1

四、字串本質

C 無字串類型,以 char[] 並以 \0 結尾表示。char c[] = "hello"; 實際佔 6 字節。

五、常用格式化輸入輸出佔位符

%d  int           %ld  long         %lld long long
%hd short         %c   char          %f   float
%lf double        %u   unsigned      %x   hex
%o  octal         %s   string        %p   pointer

六、指標核心觀念

1. 記憶體地址與指標變數

  • 每個位元組有唯一地址(門牌號),32 位系統地址總線 32 位 → 最大定址 4 GB。
  • 指標變數專門儲存地址,型態決定指向資料的解讀方式。

2. 一級/二級指標

int i = 3, *p = &i;      // p 存 i 的地址
int **q = &p;            // q 存 p 的地址

3. 野指標

未初始化指標指向隨機地址,使用前必須賦值。

七、參數傳遞:值傳遞 vs 參考傳遞(模擬)

C 只有值傳遞。若需在函數內修改外部變數,傳遞其地址(指標)。

void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; }
swap(&x, &y); // 實際修改 x、y

八、函數回傳多值技巧

透過指標參數帶出多個結果:

void calc(int *sum, int *diff) { *sum = a+b; *diff = a-b; }

九、指標運算與陣列

  • p+1 移動 sizeof(*p) 位元組。
  • 陣列名 = 首元素地址,a[i] 等價 *(a+i)。
  • int *p = a; p[2] = *(p+2) = a[2]。

十、指標長度

  • 32 位 OS:4 bytes
  • 64 位 OS:8 bytes
  • 與指向類型無關

十一、堆疊 vs 堆

十二、動態記憶體 API

void *malloc(size_t size);
void *calloc(size_t n, size_t size); // 歸零
void *realloc(void *ptr, size_t new_size); // 調整大小
void free(void *ptr);

realloc 範例:擴充學號陣列

int *p = malloc(count * sizeof(int));
p = realloc(p, (count + add) * sizeof(int));

十三、結構體

struct Student { int age; float score; char sex; };
struct Student s1 = {20, 90.5, 'F'};
s1.age = 21; // 成員存取
struct Student *ps = &s1;
ps->score = 95.0; // 指標存取
  • 不可包含函數,可含函數指標實現多態雛形。
  • 對齊規則導致 sizeof 非單純成員大小之和。

十四、聯合體

成員共用同一記憶體區塊,大小 = 最大成員大小。同一時間只保留一個成員值。

union Data { int i; char c; } u;
u.i = 0x30313233; // u.c 變為 '0' (低位元組)

十五、列舉與 typedef

enum Week { Mon, Tue, Wed, Thu, Fri, Sat, Sun };
enum Week today = Sun; // 值為 6

typedef int MyInt;
typedef struct { char *name; int id; } Employee;
Employee e = {"Alice", 101};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性堆疊堆
分配方式編譯器自動程式手動 malloc/free
釋放方式自動手動 free,否則洩漏
大小限制~2MB (Windows)受限於虛擬記憶體
速度極快較慢,易產生碎片
儲存內容區域變數、參數、返回地址動態分配物件