結構體 結構體指標的記憶體申請

2021-10-07 18:08:50 字數 937 閱讀 6011

在c語言中有4個記憶體區間,分別是**區、全域性變數和靜態變數區、堆區和棧區,這四個區間相互扶持成為好兄弟。本文著重涉及堆區,主要針對包括結構體和結構體指標申請記憶體的過程的分析。

下面是乙個結構體和結構體指標的記憶體從申請到釋放的**

#define _crt_secure_no_warnings

//vs編譯器消除對scanf等函式的安全警告

#include

#include

//包含malloc函式的標頭檔案

typedef

struct student//typedef可以將struct student結構體型別用std替代

std;

intmain()

memset (student2,0,

sizeof

(std));

//注意這裡std不要寫成了*std,因為這裡需要的是結構體大小,而不是指標,所有指標大小都是4個位元組(針對於32位機,64位機為8個位元組)

printf

("name\n");

scanf

("%s"

,student2->name)

;printf

("name:%s\n"

,student->name)

;free

(student2)

;//釋放指標指向的堆的記憶體但是不釋放指標本身的記憶體,指標本身存放在棧區,再程式執行結束後才能自動釋放

student2 =

null

;//這裡就是將指標指向空指標,避免被錯誤呼叫

return0;

}

- 為什麼要動態申請記憶體?

這是因為結構體指標的大小不是乙個確定的,要根據我們存放的結構體變數的大小才能分配好空間,所以靜態分配滿足不了需求,所以採用了動態分配。

變長結構體之結構體指標申請記憶體

什麼叫變長結構體?typedef struct student 那結構體是怎麼實現可變長的呢?如上所示,請注意看結構體中的最後乙個元素,乙個沒有元素的陣列。我們可以通過動態開闢乙個比結構體大的空間,然後讓buffer去指向那些額外的空間,這樣就可以實現可變長的結構體了。下面我們來 動態開闢乙個比結構...

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...

結構體指標中包含結構體指標

將c 轉化為c的過程中,一些c 的特性無法使用 類內私有變數在類內公共函式中使用,轉化為c的時候選擇用malloc的方式,申請一段記憶體空間去儲存它,在函式中傳指標形參去操作這些變數。這時候遇到乙個問題,結構體中包含了另乙個結構體的指標,這導致了我malloc的時候,另乙個結構體中的記憶體空間沒有申...