順序表 之結構體指標
1、指向結構體的指標變數:
C 語言中->是一個整體,它是用於指向結構體,假設我們在程式中定義了一個結構體,然後宣告一個指標變數指向這個結構體,那麼我們要用指標取出結構體中的資料,就要用到指向運算子“->”.
舉例說明:
struct SunLL
{
int a;
int b;
int c;
};
struct SunLL * p; //定義結構體指標
struct SunLL A = {1,2,3}; //定義一個SunLL型別的變數A
int x; //定義一個變數x
p = &A ; //讓p指向A
x = p->a; //等價於 x=(*p).a (*p)表示p指向的結構體變數
2、指向結構體陣列的指標變數:
指向結構體的指標變數也可以指向結構體陣列及其元素。
如果程式如下:
struct SunLL *p,sun[3];
p = sun;
如果假定sun[0]的地址是1000,指標變數p指向結構體陣列sun的首地址,由於size of(struct SunLL)的值是6,每個結構體元素佔記憶體空間6個位元組,因此p+1指向地址1006,p+2指向地址1012.
使用指標變數指向結構體變數或結構體陣列時,應注意運算子的優先順序,在c語言中"()" "[ ]" "->" "."四個優先順序相同,具有最高的優先順序,其次是”*“ ”++“ ”--“ ”&“四個相同優先順序的運算子。如:++P->a的表示式等價於++(p->a)
(++p)->a先計算++p,p指向sun[1];
P++->a;則表示式等價於(p++)->a;
p->a++的表示式等價於(p->a)++;
3、結構體作為函式引數與結構體指標作為函式引數
總結:
將結構體變數作為函式引數,是將實參值傳遞給形參,屬於值傳遞。將結構體所有引數傳遞給形參使用,但本身的值不會改變。將指向結構體變數的指標作為實參進行傳遞時,是將結構體變數的地址傳遞給形參,屬於地址傳遞,會改變實際結構體變數的成員值的。