1.結構體指標變數:指向乙個結構體變數的指標
結構體指標變數的值是相應結構體變數的首位址。
通過結構體指標變數可訪問該結構的成員變數。
一般形式如下:struct 結構名 *結構體指標變數名;
(ps:結構名和結構體變數是兩個不同的概念,不能混淆。
結構名只能表示乙個結構形式,編譯系統並不會對它分配記憶體空間。
只有當某變數被宣告為這種型別的結構時,才對該變數分配儲存空間。)
其訪問結構體變數的各個成員的一般形式為:
(*結構指標變數).成員名
結構體指標變數->成員名
當然結構體變數也可以:3. 結構變數.成員名
三種方式均等效,例如:
#include
#include
intmain()
student=
;struct student *pstruct;
pstruct =
&student;
printf
("name:%s\n",(
*pstruct)
.cname)
;printf
("number:%d\n"
,pstruct-
>inumber)
;printf
("***:%c\n"
,student.c***)
;}
2.關於 l和&l等幾種表述的說明
typedef
struct nodenode,
*linklist;
sturct node結構體型別定義為node,即node表示鍊錶節點的型別.
其指標型別定義為linklist,實質是頭指標型別,故一般可以用它表示鍊錶類。(假設有頭節點)
因為因為鍊錶的頭節點的位址知道了(l),那麼整個鍊錶的結點的資料和位址都知道了。
所以可以把頭節點的位址視作整個鍊錶的代表,對指標操作就是對整個鍊錶操作。因此我們對函式傳入鍊錶,實際上是傳入頭指標,就不難理解了
linklist l; 等同於 node *l; 宣告乙個指向node型別的指標變數l。
比如status initlist(linklist &l);等同於 status initlist(lnode *&l);
注意這兩處 不是傳入結構體變數的指標的指標,而是傳入結構體變數指標的引用。
引用變數本身沒有自己的實際儲存空間,對引用變數的操作,就是在操作原變數。
linklist l; 宣告乙個指向node結構體指標的指標變數l。 (所以l與**l分別表示什麼顯而易見)
所以,如果要改變指標l本身的值並儲存,用linklist *l,否則linklist l;
node *p; 宣告乙個node型別的結構體指標p,p是工作指標(初始時p指向) (忽略~)
總結下:重點是明白到底要改變什麼。
一般情況,向函式傳遞指標型別的引數,可以讓函式改變指標指向的內容,並將改變的效果返回;
*當改變指標變數l本身的值,使它指向新開闢的記憶體空間l =(linklist)malloc(sizeof(node)),
而不是要改變l所指向的內容的值,那麼,1.要麼向函式傳遞l的引用linklist &l,2.要麼傳遞指向l的指標(指標的指標)linklist l
typedef
struct
sqlist;
sqlist l;
和單鏈表同理: 傳入l表示函式中l是指標,乙個指向順序表位址的變數。傳入&l表示函式中l是指標(型別)引用,即指原指標。
共同點,都指向順序表的位址 ,如果在函式中修改順序表元素的值,都影響到函式外的值,因為兩者的指標都沒變。
不同點,在函式中修改指標本身所指向的位址,傳入l的情況下函式外元素的值不會發生改變,而傳入&l後函式外元素的值會發生改變。
總結:若要改變順序表的位址並且儲存它則需要用引用,如果不需要改變順序表的位址則不需要用引用。
而l其實就是乙個變數,在這裡是乙個形式引數(即乙個複製原變數的新變數,只存在於該函式中),即指向同乙個位址的不同指標。
也就是說,我們在函式中改變l所指向的位址,並沒有改變本體。
1 線性結構 線性表
由同型別資料元素構成有序序列的線性結構。利用陣列的連續儲存空間順序存放線性表的個元素。typedef struct lnode list struct lnode struct lnode l list ptrl 初始化 建立空的順序表 list makeempty 查詢int find eleme...
線性表專案1 線性表相關函式1
檔名稱 list.h list.cpp main.cpp writer 徐吉平 完成日期 2015年9月14日 版本號 code block 12.11 問題描述 完成建立 輸出線性表,判斷線性表是否為空表,求長度 某個資料元素值等功能 輸入描述 無 程式輸出 輸出線性表及表的長度,資料搜尋的結果 ...
考研複習(1) 線性表
還有5個月考研,還是得敲。環境 ubuntu10.10 ide code blocks 線性表的基本操作,還有合併,比較演算法 include include define list init size 100 define list increase 10 typedef char elemtyp...