簡單教就真的教得很簡單(?)
沒有calloc, realloc
C: malloc,free 搭配 sizeof
malloc可傳入一個參數, 意義是"要配幾個bytes",
回傳形態是void*[註1], 需要轉型,其值為配得的位址, 但若為NULL則代表配置失敗
free可傳入一個參數, 意義是要釋放的位址
sizeof用於回傳大小(單位是byte), 可以填型態名(如sizeof(int); sizeof(char) ), 可以是變數( int n; sizeof(n); int array[9]; sizeof(array); int *ptr; sizeof(ptr); )
使用大致如下:
int arraySize,*array;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
array=(int*)malloc(sizeof(int)*arraySize);
if(array==NULL) printf("fail\n");
else printf("success\n");
free(array);
有興趣的話可以看一下sizeof(array)是多少,和直接宣告陣列的(例如int array[9];)有什麼不同
C++: new, delete
單個
new 形態
delete 某個指標
陣列
new 形態[數量]
delete [] 某個指標
使用大致如下:
int arraySize,*array;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
array=new int[arraySize];
if(array==NULL) printf("fail\n");
else printf("success\n");
delete [] array;
然後,想要更開心動態配置可使用std::vector
C++: std::vector
首先你要 #include <vector>
std::vector<型態> 變數名稱;
std::vector<型態> 變數名稱(長度);
std::vector.resize(長度);
(不想打 std:: 可於前打上 using namespace std; )
使用大致如下:
#include <vector>
int arraySize;
std::vector<int> v;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
v.resize(arraySize);
/* 我功力不足不知道失敗會怎樣,不過我想應該可用try...catch擋吧(?) */
/* 同時他還有.size()可以看現在的長度 */
printf("%u\n",(unsigned)v.size());
註1. 任何指標可以轉void*
其他附註:
1. 為避免卡在中文字串編譯, 如確定不能編譯中文字串, 請自行改成英文
2. malloc/new完不需要了記得要free/delete 不然程式把記憶體吃完你會很煩(?)
沒了?沒錯不要懷疑,這裡的"簡單"指的是內容很少,你可以把code消掉看看剩幾行?