#include <stdio.h>
struct student
{
int no;
char name[20];
int year;
struct student *next;
};
struct student stu1 = {1,"張一",23};
struct student stu2 = {2,"張二",25};
struct student stu3 = {3,"張三",21};
int main()
{
struct student *p, head;
head.next = &stu1;
stu1.next = &stu2;
stu2.next = &stu3;
stu3.next = NULL;
for (p = head.next; p != NULL; p = p->next)
{
printf( "%d\t %s\t %d\t \n" , p->no , p->name , p->year );
}
getchar();
return 0;
}
這是一段結構體指標的代碼,代碼中我不明白為什么p->next這條陳述句就能使p移動到下一個節點,p是一個結構體指標,next是一個變數名表列中的指標,就是說為什么一個指標指向另一個指標就能使指標移動
uj5u.com熱心網友回復:
指標里放的是什么?地址,是吧,p所指元素的next指標里存放的地址賦值給p,就相當于p移動了,打個比方,比如你站著火車的一節車廂上,把下一節車廂移到你腳下,是不是等價于你往后移動了,不過這個比喻有點鬼畜
uj5u.com熱心網友回復:
因為你回圈前已經定義好指向了。uj5u.com熱心網友回復:
這是一個鏈表。每個結構體中保存著下一個結構體的地址。
鏈表需要一個頭,這里將頭簡化為和鏈表結構相同了。
你發現stu123都被初始化了,但是head沒有被初始化。
實際上,程式只使用了head.next作為鏈表頭,結構的其他成員并沒有被使用。
一般在鏈表中要單獨設定一個鏈表頭的,這里簡化了
這是初學者困擾的第一個地方。
struct student *p
p是在遍歷鏈表時不斷變化的,所以要單獨定義一個指標p
p = head.next
實際上p就是第一個結構的地址
也就是說,在這個鏈表中,遍歷就是從鏈表頭開始
這就是困擾樓主的地方。
在以往的遍歷中,例如for回圈
都有一個控制變數,控制回圈。
而鏈表的遍歷,一般沒用這樣一個整體的鏈表索引。有索引也不叫鏈表,叫陣列了。
鏈表是通過自身完成遍歷的。
也就是說,每個結構中,都保存了下一個結構的地址。
依次遍歷所有結構。
uj5u.com熱心網友回復:
參加過運動會吧。我指著(站在左上角的)你說
:看這一排走的真整齊(排 指標)
:這迎面走來的是3年紀4班的同學們。他們...(班 指標)
:下面將要入場的是3年紀的同學們。他們...(年級 指標)
顯然,我都是指著左上角的的你
也就是指向的位置都是相同的。
但是型別不一樣。
當我需要指向下一排的時候,則,(排 指標 ++)
當我需要指向下一個班級的時候,則,(班級 指標++)
...
uj5u.com熱心網友回復:
寫完了才看,有點答非所問了。算我的
uj5u.com熱心網友回復:
p->next是指標變數,存放的是下一個節點的地址;p = p->next;就是將下一個節點的地址賦值給p,那么p就指向了下一個節點,因此用p去訪問下一個節點的no, name, year是沒問題。year改成age可能代碼可讀性更好一些~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97350.html
標籤:C語言
下一篇:小白求解,不懂。。
