typedef struct {
int *data;
int length;
} sqlist;
void init_list(sqlist *l) {
(*l).data = (int*)malloc(3*sizeof(int));
if (!(*l).data) printf("error!");
(*l).length = 0;
}
int *data:結構體中宣告一個指向 int 的指標,此時尚未指向有效記憶體。(*l).data = (int*)malloc(...):在堆上分配 3 個 int 的連續空間,將首地址賦給 data。此為動態分配(執行期決定大小),非靜態。int data[] 寫法在結構體中僅作柔性數組成員(C99),需置於結構體末尾且配合 malloc(sizeof(sqlist) + n*sizeof(int)) 使用,與此處指標寫法不同。sqlist 結構體(棈/堆) 堆記憶體 +-------+-------+ +----+----+----+ | data | length| ---> | | | | 3 ints +-------+-------+ +----+----+----+
釋放時需先 free(l->data) 再 free(l)(若 sqlist 本身也動態分配)。