c語言結構指標和結構體成員指標問題

時間 2021-07-08 21:30:47

1樓:佼霏聞新竹

&既是取地址符號,一個指標p指向q就需要寫作p=&q,在函式引數裡是“引用”,就是別名,類似指標了,這種情況下對變數的修改會影響到函式外的原變數。

那個printf("a

=%p\n",

&a);

等於求出地址***x然後作為指標看待(%p),所以也是yyyy了

2樓:匿名使用者

樓主可以做個試驗,看看輸出結果地址間的關係,你就應該可以理解了#include

#include

struct abc

*a;int main()

3樓:匿名使用者

只給指標分配了記憶體,沒個指標指向的內容分配記憶體。

4樓:樂酷科技

不是很清楚 應該成員都要分配空間的

5樓:匿名使用者

你的abc結構體,裡面都是指標,後面申請的空間實際上是100個連續的位元組空間,它將被解釋為100/(4+4)=12.5個結構體陣列元素.這樣說來, 你這種申請記憶體, 可能為你後面的使用埋下了巨大的隱患.

因為最後一個結構體只有一半的空間.後面如果定義了其他變數,它們可能被你覆蓋.

另外,你必須要對malloc的返回指標進行顯示的型別轉換.你寫的這個果斷不能通過編譯.還一堆錯誤在這裡, 不嚴謹呀!

c語言結構體指標問題

6樓:

你指標有沒有移動,輸出3次都是同一個節點,當然是一樣的了。

可以這版樣權

改試試:

p = freee ;

for(i=0;ipn,p->pfn);

p = p ->next ;}

7樓:_葉子妞妞

void main()

}你的連結串列一

bai直沒du有移動,列印出

zhi來的dao 始終是

回第一個節點的答。

8樓:

沒看全部,就最後那個迴圈,寫的printf("%d %d \n",freee->pn,freee->pfn);就是反覆輸出,freee->pn和freee->pfn),當然是一樣的。你意圖要幹啥?說清楚了才好改!

結構體指標變數與結構體成員指標問題

9樓:匿名使用者

typedef struct node aa; //定義了 aa可以當作型別 struct node

aa *p,a;這一句宣告瞭兩個變數 一個結構體指回針 和 一個結構體 。

答p=&a; //表示 結構體指標指向 結構體a的地址p->next=&a ;//表示 p指向的結構體 a 中的 結構體指標 也指向 a所在的地址

c語言裡結構體的問題。結構體定義指標型別是怎麼回事?

10樓:小笑笑狗狗

您好,您的問題是不是有點略多,下面一一為您解答:

1、typedef char **huffmancode 實際上是typedef (char *) *huffmancode。寫成這種形式更好理解, **huffmancode是指向指標的指標,這裡也可以理解為是指向字串的指標,因為char*字元陣列相當於字串。

2、*huffmantree表示指向結構體htnode的指標,htnode是typedef語法指定的結構體的別名,然後*huffmantree是在定義結構體的同時定義了指向結構體的指標。

3、指標只是一個地址,huffmantree作為結構體指標同樣是一個地址,因此不存在它內部有4個變數一說。嚴格意義上講是huffmantree這個指標指向的結構體中有這4個變數,而這4個變數和在main函式裡定義的普通變數一樣,都佔用實際記憶體,在新建結構體的同時為這4個變數分配記憶體空間。

4、ht=(huffmantree)malloc((m+1)*sizeof(htnode))。這個是malloc的語法,該語句的含義是分配m+1個htnode結構體佔用的記憶體,將分配的記憶體地址賦給ht。sizeof作用是判斷某個型別所佔用的記憶體空間,此處是計算htnode佔用的空間大小,然後(m+1)*sizeof(htnode)表示m+1個htnode,malloc是請求分配記憶體,(huffmantree)是強制型別轉化,將得到的記憶體地址強制轉化為huffmantree(即htnode指標型別)。

5、malloc是c語言中常用的動態分配記憶體的語法,劃重點“動態”,當你需要動態申請記憶體時(例如給陣列擴容,還有此處的為結構體申請空間)時用到該語法,c語言中記憶體相關語法還有realloc,free可以自行了解一下。在c++中new和delete更為常用。

11樓:銀霜傲雪

char **是指向指標的指標

huffmantree既不是變數也不是地址,是定義的一個別名,注意看struct前面還有一個typedef ,所以huffmantree是這個struct的指標的別名,所以huffmantree ht就可以看作是htnode *ht。

malloc是動態分配記憶體空間,在你事先不知道要分配多大空間的時候使用

12樓:米嵐

比如struct lnode*linklist;

lnode是結構變數名;

linklist就是指標,指向該結構體的指標。

呼叫內部應為:結構變數名.成員名

13樓:匿名使用者

malloc()分配一個記憶體單元 然後把這個單元的首地址賦給一個指標。huffmantree ht;只是定義一個htnode的指標並沒有給ht分配記憶體,所以必須用malloc給它分配一塊記憶體!

結構體指標和結構體中的指標的區別

14樓:啞然

1、針對的資料型別不同:

結構體指標:結構體指標對變數。

結構體中的指標:結構體中的指標指成員。

2、針對的含義不同:

結構體指標:指向結構體型別的指標。

結構體中的指標:指成員指標。

3、用法不同:

結構體指標:

struct a;struct a m,*p=&m;

p就是struct a型別的結構體指標,指向了同型別的結構體變數m。

結構體中的指標:

struct b

;struct b m,n; float bb=1.1;m.b=&bb;m.next=&n;b成員是指float型別的指標,next成員是指struct b型別的指標。

15樓:天天向上知識店鋪

結構體指標是指指向結構體型別變數的指標。

如:struct a

;struct a m,*p=&m;

這裡的p就是struct a型別的結構體指標,指向了同型別的結構體變數m;有這個指向操作後,以後用m和用*p是一樣的。

結構體中的指標是指成員指標。

如:struct b

;struct b m,n;

float bb=1.1;

m.b=&bb;

m.next=&n;

這裡的b成員是指float型別的指標,next成員是指struct b型別的指標。

16樓:匿名使用者

如果有個叫做 abc 的結構體,結構體指標就是 abc *結構體中的指標,就是它有個成員是指標

struct abc;

17樓:

這裡的b成員是指float型別變數的指標,next成員是指struct b型別變數的指標。

float、struct b都只是一種資料型別,是不佔用記憶體的,故沒有指標;

只有float或struct b定義的變數才會有指標(如:float a;a為變數就佔記憶體,就有地址即指標)

c語言的關於結構體中含有指標問題?

18樓:彭珂的課堂

c語言_071_指標的定義和使用_上

19樓:匿名使用者

這是對齊問題,是在編譯的時候,由編譯器根據所在的系統平臺來完成的。對齊的英文單詞為:align。

看篇文件,連結如下:(說明:可暫時不理解對齊這個東西,往後深入程式設計以後,慢慢體會就來了,過來人擔保,先不理解對齊,不會影響你學習程式設計。)

20樓:歡樂多

指標8位元組,64位程式嗎?

c語言中陣列指標和結構體指標問題

樓上都說的很不錯。針對補充,我說兩句 結構體名字不是指標,結構體陣列的名字才是指標 就好像int x x不是指標,int x 2 x是常量指標 同樣 struct aa aa x x不是指標,aa x 3 x是常量指標 對於陣列int a 2 我們通常把a看成是指標 但實際上,這個指標並不存在的,a...

結構體指標的問題,結構體指標和結構體中的指標的區別

楚劒蘭心 是呼叫操作符,是對指標的解引用然後再呼叫,只有指標呼叫別的變數或函式時使用,並且只要是用指標來呼叫的話,就必用它。比如 struct s int value s p 定義一個結構體指標 p value 呼叫結構體內的變數。也就是 p value 二者等價。 公珍碧魯哲 struct l 粗...

關於結構體指標問題,還有函式指標作為結構體成員的問題

雪豹出擊 int changevar int 你少些了個e這是一個函式指標,這個changevar指標指向一個這樣的函式 這個函式有一個int型引數,返回值也是int.所以if fb info.changevar 的意思就是判斷結構體fb info中的changevar是否為空,等同於if fb i...