C C 中結構體變數與結構體指標記憶體分配問題

2021-07-16 16:46:00 字數 1000 閱讀 7820

宣告乙個結構體變數,無論是否初始化,都開闢記憶體,宣告乙個結構體指標變數,對其初始化的時候才會開闢記憶體。

a a[3];  a是a型的,有3個,當然分配a乘3大小的空間

a* a;    a是a*型的,當然只分配a*大小的空間,而不會分配a大小的空間

好像跟你說的不太一樣,結構體陣列的話,我在課本裡看到的確不用再次申請空間了啊[/quote]

結構體變數分配結構體本身大小的空間,結構體指標分配4個位元組,其實任何型別的指標都是分配四個位元組的指標空間。

所以:a a[3]; //a裡面是三個a變數,所以分配三個結構體大小

a *a;  //a是乙個指標,分配4個位元組,就算a再大,a也只是4個位元組,因為任何型別的指標都是4個位元組。要使用a,必須先要對指標初始化,也即分配空間了。

如:a *a;

a = (a*)malloc(sizeof(a));

我們完全可以撇開結構體,把問題簡單化成int型別來說明這個指標問題:

int a1[10];

int *a2;

很容易知道,a1是包含10個int的陣列,大小也就是10*sizeof(int)。我們可以直接使用a1不要在進行什麼初始化或者分配空間的遊戲,因為陣列a1裡面本身存放的就是int變數本身了。

然後a2,是乙個int*的東西,也就是整型指標,a2不能存放int變數,它只能存放位址,乙個int變數的位址。如果要使用a2,必須首先對a2初始化,即將它指向乙個int變數的位址,如:

a2 = (int*)malloc(sizeof(int));

或者int i = 10;

a2 = &i;

所以,malloc函式的作用是首先宣告乙個變數,然後返回該變數的位址。

所以:a2 = (int*)malloc(sizeof(int)) 的含義就是把該變數的位址賦值給a2,和a = &i 本質上並沒有什麼不同,只是乙個變數是棧上,乙個是堆上,都是乙個位址賦值。

所以,所謂的分配空間,就是對指標賦值,把乙個變數的位址賦值給乙個指標。

結構體指標與結構體中變數的指標

結構體指標與結構體變數指標的區別,在進行實現的工程專案中會有許多地方用到結構體指標的情況,在使用這前都需要先malloc一塊空間之後才能有空間進入儲存資料,例項 如下 include includetypedef struct student student t,pstudent t void pr...

c c結構體陣列 結構體指標

結構體中自己常常弄不清的。兩個常用的結構體陣列 結構體指標 將自定義的結構體放入到陣列中方便維護 語法 語法 struct 結構體名 陣列名 元素個數 舉例 struct student intmain for int i 0 i 3 i 2 結構體指標 顧名思義就是指向結構體的乙個指標 通過指標訪...

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

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