首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言順序表初始化:靜態指標與動態分配的關係

     編輯:程式設計綜合問答

代碼片段


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 本身也動態分配)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved