C語言中連結串列中的結構體指標變數問題求教

2021-07-08 21:32:22 字數 2210 閱讀 6582

1樓:

定義結構體指標變數時,只分配儲存指標型別需要的空間,比如listnode *p;這裡p有給他分配儲存指標的4個位元組的空間。

實際上你是要讓p指向一個結構體空間的,這個結構體空間在哪?

可以先定義listnode a;

然後 p=&a;

這時p指向一個之前申請分配過空間(編譯器設定過其地址和大小,在棧空間存放著了)。

現在我們要讓p指向一個臨時決定分配的空間(我們需要用來儲存輸入資訊或計算資訊),並讓p指向他,使得之後我們隨時通過p來訪問他。於是使用malloc先分配記憶體,並把malloc返回的地址賦值給p。在這裡,我們不能使用定義臨時結構體變數並讓p之前他(就如上面所說的p=&a),因為在子函式定義的變數,他們都是分配在子函式被呼叫時為其建立的棧空間,子函式退出時這些空間被釋放**,我們定義的變數生命結束,他們所在地址會被其他子函式被呼叫時建立棧空間所重用,那些地址很可能被新函式使用並修改所存資料。

這是我們不敢想象的,為了資料安全,必須使用malloc分配記憶體,因為malloc分配的記憶體是在堆空間分配,只有使用free後,其記憶體才會釋放,才能被其他地方重新分配。

2樓:匿名使用者

宣告結構體指標變數的時候,難道沒有為其分配記憶體嗎?

a:沒有,需要malloc

這和普通的指標分配沒有區別。

typedef struct stu

stu_t;

void main()

3樓:透明的沙漏

指標宣告的時候只是開闢了一個存放地址的記憶體,不管你這個指標是指向物件的還是char還是別的型別,指標宣告開闢的空間是一樣的,因為對於指標來說它存的只是地址,至於地址裡面的是char還是long對於宣告指標的記憶體是沒有關係的,所以如果指標要裝東西,需要malloc一個記憶體來存放char或者long型的東西

4樓:匿名使用者

在3kw的電爐盤上裝上5kw的爐絲可以嗎

c語言 單連結串列 結構體指標 賦值想等 說明什麼?

5樓:德昂當

=不是相等,這是賦值的意思

相等是比較的意思,比較兩個數相等用 == 雙等號p=h 賦值,就是把h的地址值賦值給 p ,為以後的操作準備。

h 中放的首地址,p 中放當前前一個節點,此時只有一個首地址,p中也放首地址。

後面,新生成後一個結構體節點,就會把新的放到p中。

其實p中放的一直是當前最後一個節點的地址,這樣在新生成的節點後,才會把新生成的節點地址放入當前節點(即新生成的前一個節點)中的 link中。

link中放的是下一個節點的地址。

6樓:謝應宸

=不是相等,是賦值

p=h就是將指標變數h儲存的地址內容賦給p,這樣就表示指標p和h指向了同一塊記憶體

c語言中相等比較是用的==

7樓:匿名使用者

結構體指標相等,確實是表示都指向同一個結構體。

一般連結串列只需要知道頭指標head即可,然後遍歷頭指標就可以訪問連結串列中所用的元素。

所以head的值不能變~~,所以一般要遍歷連結串列,需要定義一個臨時指標,首先指向頭部,然後逐個往下遍歷

一般就是

p=head;

while(p!=null)

你的程式不完整·可能還有些沒出現~ 看函式名字應該是增加節點吧,增加節點可能有比較的專案,那就需要遍歷列表,這點接和順序表有差別了

順序表查詢容易,替換難, 連結串列是查詢難(遍歷),替換容易

關於c語言結構體指標的問題,求大神回答....

8樓:燕歸來

在c1=(order*)malloc(sizeof(order));

c2=(goods*)malloc(sizeof(goods));

c3=(customer*)malloc(sizeof(customer));

下面添復加

c1->a=(goods*)malloc(sizeof(goods));

c1->c=(customer*)malloc(sizeof(customer));

因為你雖然製為c1,

baic2,c3分配了空間,

du但是沒有為c1中的zhigood *a和customer *c分配空dao間

9樓:匿名使用者

void main()

c語言定義結構體變數,C語言 定義結構體變數

樂跑小子 首先,定義一個結構的一般形式為 struct結構名 成員表由若干個成員組成,每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為 型別說明符 成員名 成員名的命名應符合識別符號的書寫規定。例如 struct stu 在這個結構定義中,結構名為stu,該結構由4個成員組成。...

C語言中定義函式,變數是指向指標的變數,呼叫時要怎麼呼叫

首先fact函式返回的是double型別,第乙個引數是double型的二維指標.所以是 c i fact c,y,z 因為double c 3 是二維double指標,c i 是乙個double一維指標,c i 就是double型資料。c是二維指標,可以傳過去 c i fact c,y,z c i ...

c語言結構體成員指標初始化問題,C語言結構體成員指標初始化問題

一中只是將name指向 jim 所在的空間,jim 已經存在了,直接將指標指向他即可,而二中是複製乙個 jim 到name所指向的空間,沒有初始化當然不行 第乙個 jim 返回的是乙個位址,是正確的。第二個記憶體分配小了。問題 一 中的student.name並未初始化,為什麼能賦值成功?stu.n...