c語言 為結構體指標的指標開闢空間

2022-05-08 02:35:19 字數 4674 閱讀 8117

1樓:匿名使用者

struct stu

; //--丟失逗號

int main()

//p->a=malloc(10*sizeof(int)); //不知道成功沒----對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍。(參考下struct和union的記憶體對齊方式)

//所以不必再為結構體內部申請空間。 另外int *a, 申請多大的空間也沒用啊 就一個int型 所以結構體裡面定義為int a或者定義結構體陣列。

for(i=0;i<10;i++)

}return 0;}

2樓:糖豆豆的

malloc預設分配的空間型別是 void* 。。所以一般使用malloc時,要加強制型別轉化。。

p=( struct stu* )malloc(10*sizeof(p)); //為p開闢空間,成功

p->a=( int* )malloc(10*sizeof(int)); //不知道成功沒

malloc分配失敗 返回null

if( p->a=( int* )malloc(10*sizeof(int)) == null )

else

3樓:匿名使用者

可以用 malloc 來申請空間 然後返回值可以給指標

參考

4樓:飲馬黃河源

struct stu

*pa;

pa=(stu *)malloc(sizeof(stu));

5樓:

struct xx *ps;

ps = (struct xx *)malloc(sizeof(struct xx));

c語言定義一個結構體指標變數跟定義該指標變數之後再呼叫malloc為其分配記憶體之後有什麼不同? 150

6樓:

你的「分配bai記憶體」

的概念du有點問題——不是用malloc為某zhi個指標分配dao了記憶體,而是先用

專malloc分配了記憶體,再將屬

7樓:

其本質實是沒有區

bai別的。

都是這du種型別的指標。

唯一zhi的區別在於。p1不指

dao向任回何地址。p2指向了答某段有效的記憶體。

連結串列中,定義一個指標,是為了讓其記錄下首地址,遍歷完成後,head依然是head,不然的話,你用head去遍歷,到最後 你就只剩下一個節點了 。 防止記憶體洩漏。

c語言中,怎麼使用malloc函式為陣列指標分配空間 比如要為char *p[ ]分配空間,應該怎麼弄

8樓:

指標陣列和陣列指標是兩個不同概念,你這裡給出的定義例項實際上是指標陣列的定義。

指標陣列是指所定義陣列的每個陣列元素都是一個相應資料型別的指標,開設空間的操作可以應用迴圈語句進行,例如:對於char *p[10]; 可以應用

for(i=0;i<10;i++)

p[i]=(char *)malloc(sizeof(char)*n); //為每個指標申請開設n字元的儲存空間

開設後,對於p的使用與二維陣列的使用格式類似,可以有效的使用兩個下標,

如 p[0][0]='a';

還可以像每個指標中賦值字串: p[2]="beijing"; 當然字串長度應該小於n。

而陣列指標,是指定義為指向某個固定大小順序空間的指標,定義的格式如下:

char (*pa)[10]; //定義一個指向擁有10元素的字元陣列的指標,

int (*p)[10];

應用格式可以參考下述程式,申請空間、賦值、輸出後,可以觀察到100被賦值到第五行第十個元素,指標可以像二維陣列一樣通過兩個下標引用所申請開設的空間。

#include

main()}

c語言如何在結構體中定義指向自身資料結構的指標?

9樓:匿名使用者

上樓錯誤:

在定義*pa的時候,編譯器根本就不知道還有a這個型別所以應該是這樣的

typedef struct a

a;象定義連結串列的結構的時候有這樣:

typedef struct lq

lqnode;

一個道理.

10樓:匿名使用者

typedef struct aa;

11樓:社會人二

這是連結串列,搜一下連結串列的相關知識你就會了

在c語言裡面宣告指標並用malloc賦值與與直接宣告變數並獲取其指標有何區別?

12樓:

區別當然是有的

link n; 申明結構體實體

&n 結構體地址

link *n; 申明結構體指標

n=malloc(sizeof(link)); 讓結構體指標指向申請的記憶體空間,需要free釋放

後者需要釋放並且申請大小靈活

希望對你有幫助

13樓:戀v天真

首先你得明白malloc函式的作用;malloc函式是在記憶體中找到一個合適大小的記憶體空間來儲存資料,並讓指標指向這個空間的首地址。它的意義是在建立陣列時,可以建立動態陣列。

比如 int a[n],*p;p=a;是不合法的。而int *p;p=(int *)malloc(n*sizeof(int))卻可以實現建立這樣一個長度為n的陣列

14樓:百

有區別的。

malloc分配的記憶體是長期的,一直到free,你的指標指向的記憶體才會無效。

但是&n賦值給指標,離開link n所在的函式以後,指標指向的記憶體已經無效了,繼續使用的話會崩潰哦。

100分o(∩_∩)o

15樓:愛問西瓜愛答樹

當然有了。

link

link n;就是建立一個link的結構體,這個變數叫做n。&n表示link結構體n的首地址。

但是因為link是連結串列,裡面有個成員是指向一個結構體的指標。所以要用malloc分配空間,而malloc(sizeof(link));就是為這個地址分配一個可用的堆空間。

你可以開始定義一個 link l;但是l.next是指標,還是要用malloc為其分配空間。

因為這樣是不行。這樣定的話會是一個死遞迴,是非法的。

link

16樓:匿名使用者

區別在於&n是個區域性靜態的指標,是在棧中。malloc分配的是動態的,分配在堆區中。

c程式中編譯後的程式在載入後,棧中分配區域性變數空間,堆區是向上增長的用於分配程式設計師申請的記憶體空間。如果你在一個函式中一下子分配一個很大的資料,就可能導致棧溢位。

另外malloc用於分配大小不固定的連結串列,使用變數靜態分配的不夠靈活。

17樓:匿名使用者

區別是有的,直接宣告的變數儲存在連續的記憶體區域上,比如char a[5];char b[5];你可以用gets(a)輸入10個字元;使用malloc分配的記憶體區域不一定是連續(很大程度上不是連續的),他們是一塊一塊的記憶體區域,使用連結串列聯絡在一起。

直接宣告的變數儲存的區域叫做 棧(stack),使用malloc獲得的區域叫堆(heap)。

棧是連續高速而小的(1m,2m的都有,一般不超過2m),堆是不連續低速但容量極大的。

怎樣為結構體指標變數分配空間?

c語言如何在動態的結構體陣列開闢新空間

18樓:匿名使用者

1、可以在結構體中新增指標類成員變數,並在成員函式中實現動態陣列的分配。

2、以下以一個僅實現整型動態陣列,不包含其它功能的類為例做說明。

class array //類名

else

}~array()};

19樓:巫馬尓絲

你這個已經開闢好了啊,

array = (struct record *)malloc(sizeof(struct record )*num);

就是開闢了num*sizeof(struct record )大小的連續空間

不過你後邊對array進行操作時候儘量不要用陣列形式,用指標形式會比較好。

開闢好了,你這就是固定的num個元素的陣列,

如果要增大這個陣列中元素的個數,就是把這個陣列變長的話,

只能重新申請新的總個數的空間大小,比如增長m個

就只能重新申請 (struct record *)malloc(sizeof(struct record )*(num+m));

然後把原來的資料複製過去,因為陣列是連續的空間,必須一次分配好全部記憶體才行。

20樓:黃曉輝

array = (struct record *)malloc(sizeof(struct record )*num);這就代表你已經開闢了一個空間給array了。

如果你想往裡面寫東西就可以這樣,array.coef = 2.2,array.expn = 3;

c語言 指標函式跟函式指標的區別

指標函式是個函式,其返回值是指標 函式指標是一個指標,指向函式的入口地址 典型的指標函式如 void malloc unsigned int size 這個記憶體分配函式就是個返回void 指標型別的函式。若寫成void fun ptr unsigned int size 這時fun ptr表示一個...

c語言中的指標有什麼意義,C語言中的指標有什麼意義

寫簡單的程式的話不用指標也行了吧.比如這裡a是一個地址 編譯後 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.對於指標的便利,我現在能想到的,可能是 函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷 c 裡的拷貝建構函...

空指標究竟指向了記憶體的哪個地方,C語言中,空指標NULL會佔記憶體嗎?多少位元組

這樣一看才知道大家對空指標的概念如此渾濁哦 首先 void 這不叫空指標,這叫無確切型別指標.這個指標指向一塊記憶體,卻沒有告訴程式該用何種方式來解釋這片記憶體.所以這種型別的指標不能直接進行取內容的操作.必須先轉成別的型別的指標才可以把內容解釋出來.還有 0 這也不是空指標所指的內容.0 是表示一...