1. 程式人生 > 其它 >C語言冷門知識——柔性陣列

C語言冷門知識——柔性陣列

技術標籤:筆記c語言

什麼是柔性陣列?
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語言結構體裡的陣列與指標