C語言冷門知識——柔性陣列
阿新 • • 發佈:2020-12-16
什麼是柔性陣列?
C99 中,結構中的最後一個元素允許是未知大小的陣列,這就叫做『柔性陣列』成員。
我對此的理解 為
1.是結構體的最後一個元素。
2.具有0個元素。
3.無大小
例:
#include<stdio.h>
struct student {
char clss[32];
char name[32];
int score[];
};
int main()
{
printf("%d", sizeof(struct student));
return 0;
}
我們知道在C語言的語法中不允許存在大小未知的陣列,但由上柔性陣列是個例外,在結構體中 arr[]是不會發生報錯。
柔性陣列的特點:
結構中的柔性陣列成員前面必須至少一個其他成員。
sizeof 返回的這種結構大小不包括柔性陣列的記憶體。
包含柔性陣列成員的結構用malloc ()函式進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應
柔性陣列的預期大小。
柔性陣列的簡單使用測試
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
struct student {
char clss[32];
char name[32];
int score[];
};
int main()
{
struct student *p = (struct student *)malloc(sizeof(struct student) + sizeof(int) * 10);
assert(p);
for (int i = 0; i < 10; i++) {
p->score[i] = i;
printf("%d\n",p->score[i]);
}
free(p);
return 0;
}
這樣柔性陣列成員score,相當於獲得了10個整型元素的連續空間。
拓展:
C語言結構體裡的陣列與指標