C C 之變長陣列 VLA 和可伸縮型陣列成員

2021-07-23 05:52:38 字數 552 閱讀 4982

陣列主要用來處理一系列同型別的資料集合,在c/c++中應用十分廣泛。其中有兩種特殊的陣列,變長陣列(vla)和可伸縮型陣列成員,應用得當的話,會非常方便。

##變長陣列(vla)

在多維陣列中,陣列的行可以在函式呼叫時傳遞,但是陣列的列一般在函式內部定義。

如下所示:

#define cols 4

int sum2dim ( int a[cols],int rows )

使用格式:

struct flex *pf

pf= malloc (sizeof( struct flex) + 5 * sizeof( double);

pf -> count = 5;

pf -> sco[2]=18.5;

for (i=0;i < 5; i++)

用指標來訪問伸縮型陣列和普通陣列一樣。

變長陣列和伸縮型陣列成員都是在呼叫的時候確定陣列的大小,分配空間,可以節省記憶體。

alloca 和 變長陣列(VLA)

alloca 是gnu libc中的記憶體分配函式。void func 一般來說,alloca 的記憶體是在呼叫alloca的函式func 的棧上分配的,當func 返回或者異常退出的時候,分配的記憶體或自動釋放。以上說的是一般的情況。下面說說不一般的情況 在hp ux 系統上時,或者在其他的一些系...

多維陣列 陣列指標 函式 變長陣列VLA

include define cls 2 define row 2 這三種形式等價 int sum 2 int cls int int sum 2 int cls int intsum 2 int a cls int n 這三種形式等價 int sum 3 int cls row int int s...

C99中的變長陣列(VLA)

處理二維陣列的函式有一處可能不太容易理解,陣列的行可以在函式呼叫的時候傳遞,但是陣列的列卻只能被預置在函式內部。例如下面這樣的定義 define cols 4 int sum3d int ar cols int rows 現在假定了如下的陣列 int array1 5 4 int array2 10...