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

Android NDK 開發入門(一):C 語言基礎速成教學

     編輯:關於C語言

Hello World

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("Hello world!\\n");
    system("pause"); // Windows 專用,暫停控制台
    return 0;
}

基本資料類型與大小(32 位系統)

類型位元組備註
char1可作為 byte 替代
short2
int4
long464 位系統常為 8
float4
double8
void—無值

無 bool:C99 前用 int(0 假、非 0 真),C99 引入 _Bool 並 #include <stdbool.h> 使用 bool/true/false。
無 String:以 char[] 或 char* 表示,以 '\0' 結尾。

輸入輸出格式字串

格式對應類型
%dint
%ldlong
%cchar
%ffloat
%lfdouble
%schar* (字串)
%x十六進制
%o八進制
%hdshort

指標核心觀念

  1. 指標 = 位址,&var 取址,*ptr 解參考。
  2. 指標變數 儲存位址的變數,如 int *p = &i;。
  3. 指標運算:p+1 移動 sizeof(*p) 位元組,僅對連續記憶體(陣列)有意義。
  4. 所有指標大小相同(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),編譯器自動換算。

動態記憶體管理

堆 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。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數用途備註
malloc(size)堆上配置回傳 void*,需轉型
free(ptr)釋放必須配對,否則洩漏
realloc(ptr, new_size)調整大小可能移動記憶體,舊指標失效