C語言中實現變長陣列有幾種方式:1.柔性陣列 2.動態分配記憶體
1.使用柔性陣列的話就是在結構體中定義一個長度為0的陣列:
struct MyData { int nLen; char data[0];};陣列的長度為0就表明陣列佔用的長度只有一個數組名,當要使用的時候就可以直接分配製定長度的空間,使用完之後釋放即可。
int nLen = 100;MyData *myData = (MyData*)malloc(sizeof(MyData) + 100);
再對這個陣列進行其他操作,操作完了之後free掉分配的空間。
2.使用動態分配的方式,和1差不多,只不過要先定義一個指標用來儲存分配好的記憶體空間的其實地址,分配好之後,這個指標就可以當作陣列來使用,你要分配多少都是可以變化的,操作完成之後同樣要進行釋放。
char *p;
p=(char *)malloc(100);
//對p進行操作
free(p);
如果你的變化的長度是來自其他計算公式或者函式也可以,可以另外定義一個函式,函式的返回值可以是結構體或者指標,而引數就是這個變化的長度。
char* TEST(int len){
char *p; p=(char *)malloc(len); return p;
}
呼叫:char *a = TEST(獲取長度的其他函式);
C語言中實現變長陣列有幾種方式:1.柔性陣列 2.動態分配記憶體
1.使用柔性陣列的話就是在結構體中定義一個長度為0的陣列:
struct MyData { int nLen; char data[0];};陣列的長度為0就表明陣列佔用的長度只有一個數組名,當要使用的時候就可以直接分配製定長度的空間,使用完之後釋放即可。
int nLen = 100;MyData *myData = (MyData*)malloc(sizeof(MyData) + 100);
再對這個陣列進行其他操作,操作完了之後free掉分配的空間。
2.使用動態分配的方式,和1差不多,只不過要先定義一個指標用來儲存分配好的記憶體空間的其實地址,分配好之後,這個指標就可以當作陣列來使用,你要分配多少都是可以變化的,操作完成之後同樣要進行釋放。
char *p;
p=(char *)malloc(100);
//對p進行操作
free(p);
如果你的變化的長度是來自其他計算公式或者函式也可以,可以另外定義一個函式,函式的返回值可以是結構體或者指標,而引數就是這個變化的長度。
char* TEST(int len){
char *p; p=(char *)malloc(len); return p;
}
呼叫:char *a = TEST(獲取長度的其他函式);