1. 程式人生 > >順序表 之結構體指標

順序表 之結構體指標

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、結構體作為函式引數與結構體指標作為函式引數

總結:

將結構體變數作為函式引數,是將實參值傳遞給形參,屬於值傳遞。將結構體所有引數傳遞給形參使用,但本身的值不會改變。將指向結構體變數的指標作為實參進行傳遞時,是將結構體變數的地址傳遞給形參,屬於地址傳遞,會改變實際結構體變數的成員值的。