Hello World
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello world!\\n");
system("pause"); // Windows 專用,暫停控制台
return 0;
}
基本資料類型與大小(32 位系統)
| 類型 | 位元組 | 備註 |
char | 1 | 可作為 byte 替代 |
short | 2 | |
int | 4 | |
long | 4 | 64 位系統常為 8 |
float | 4 | |
double | 8 | |
void | — | 無值 |
無 bool:C99 前用 int(0 假、非 0 真),C99 引入 _Bool 並 #include <stdbool.h> 使用 bool/true/false。
無 String:以 char[] 或 char* 表示,以 '\0' 結尾。
輸入輸出格式字串
| 格式 | 對應類型 |
%d | int |
%ld | long |
%c | char |
%f | float |
%lf | double |
%s | char* (字串) |
%x | 十六進制 |
%o | 八進制 |
%hd | short |
指標核心觀念
- 指標 = 位址,
&var 取址,*ptr 解參考。
- 指標變數 儲存位址的變數,如
int *p = &i;。
- 指標運算:
p+1 移動 sizeof(*p) 位元組,僅對連續記憶體(陣列)有意義。
- 所有指標大小相同(32 位 4 bytes,64 位 8 bytes),與指向類型無關。
常見指標錯誤
- 未初始化即解參考:
int *p; *p=10; → 未定義行為。
- 類型不匹配:
short *q = (short*)&i; 讀取錯誤位元組。
- 釋放後使用:
free(p); *p=1; → 懸空指標。
指標實戰:交換兩數、多重回傳
void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; }
void add3(int *a, int *b) { *a+=3; *b+=3; } // 相當於回傳兩值
指標與陣列
- 陣列名 = 首元素位址:
arr == &arr[0]。
- 函數參數
void f(int *arr, int len) 等價 void f(int arr[], int len)。
arr[i] == *(arr+i),編譯器自動換算。
動態記憶體管理
| 函數 | 用途 | 備註 |
malloc(size) | 堆上配置 | 回傳 void*,需轉型 |
free(ptr) | 釋放 | 必須配對,否則洩漏 |
realloc(ptr, new_size) | 調整大小 | 可能移動記憶體,舊指標失效 |
堆 vs 棧:堆大小受限於虛擬記憶體,手動管理;棧 2MB(Windows 預設),自動管理、速度快但空間小。
多層指標與函數指標
int i=3, *p=&i, **q=&p, ***r=&q; // ***r == 3
int add(int x,int y){ return x+y; }
int (*pf)(int,int) = add; pf(3,5); // 8
結構體、聯合體、列舉、typedef
struct Student { char sex; int age; float score; int id; };
struct Student st = {'F', 20, 90.5f, 1001};
struct Student *ps = &st; ps->age; // 箭頭運算子
union Mix { long i; int k; char c; }; // 共用記憶體,長度取最大成員
enum WeekDay { Mon, Tue, Wed, Thu, Fri, Sat, Sun };
enum WeekDay today = Wed; // 值為 2
typedef int MyInt; MyInt x = 10; // 類型別名
NDK 開發關鍵提示
- JNI 類型對應:
jint=int、jstring 需轉 char*、jintArray 需 GetIntArrayElements。
- 編譯用
Android.mk + ndk-build,產出 .so 載入 Java。
- 除錯用
__android_log_print + logcat,Android.mk 加 LOCAL_LDLIBS += -llog。
- 上一篇文章: Android NDK 開發實戰(二):完整案例與常見錯誤處理指南
- 下一篇文章: C 語言實作循環隊列(連續儲存版)
Copyright ©
程式碼之家 All Rights Reserved