Android Ndk 學習筆記(目錄)
1 c語言中 ,非0 及true 0 == false
void m03t1(){
// c語言中 ,非0 及true 0 == false
if (0){
printf("這是真\n");
}else{
printf("這是假\n");
}
if (124){
printf("這是真\n");
}else{
printf("這是假\n");
}
if (-3){
printf("這是真\n");
}else{
printf("這是假\n");
}
}
E:\C\Project\C01\cmake-build-debug\C01.exe
這是假
這是真
這是真
Process finished with exit code 0
2 開辟靜態區域
void m03t2(){
// 開辟靜態區域
// 開辟是直接進堆疊 ,確認大小
// 堆疊的大小是有限的 ,下面代碼將發生錯誤
// int bigArr[10 * 1024 * 1024] ; // 10 * 4(int) = 40M //堆疊溢位
int arr[5];
int i = 9 ;
double sk = 123;
}
3 開辟動態區域 malloc
void m03t3(){
// 開辟動態區域 malloc
// 需要引入 #include <stdlib.h>
int * arr = malloc(10 * 1024 * 1024); // 在堆中開辟 40M 空間 不會堆溢位
// 開辟后續要手動釋放記憶體
free(arr);
// 需要把指標置空 ,否者該指標就成為了 懸空指標
arr = NULL ;
}
4 靜態開辟的記憶體空間大小,是不能修改的,如果不需要動態修改空間大小,當然使用 堆疊區 【盡量使用 靜態開辟的,如果實在是需要動態改變才使用malloc
void m03t4(){
// 靜態開辟的記憶體空間大小,是不能修改的,如果不需要動態修改空間大小,
// 當然使用 堆疊區 【盡量使用 靜態開辟的,如果實在是需要動態改變才使用malloc】
int num = 5 ;
// 開辟的大小 與型別有關
int * arr = (int *) malloc(sizeof(int) * num);
double * doubleArr = (double *) malloc(sizeof(double) * num);
if (doubleArr){
free(doubleArr);
doubleArr = NULL ;
}
//realloc() 函式 重新分配記憶體地址 ,
int new_num = 10 ;
// 第一個引數是 原陣列的指標
// 第二個引數是 新陣列的總大小
// 如果記憶體空間足夠 ,新的arr地址 將會從arr 原地址往后延伸
// 如果記憶體空間不夠延續時 ,會復制舊資料,找到一塊新足夠長的地址進行復制操作
// 如果記憶體空間不夠延續,并且也找不到足夠長的地址時 ,將會重建失敗
int * arr2 = realloc(arr ,sizeof(int) * new_num);
// arr2 不等于空 非0即true
// arr2 成功后 ,會釋放掉原來arr的指標,重新回傳一個指標,
// 雖然回傳的指標有可能和原來的指標一樣,即不能再次釋放掉原來的指標,
if (arr2){
free(arr2);
arr2 = NULL ;
arr = NULL ;
}else{
free(arr);
arr = NULL ;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/289806.html
標籤:其他
