結構體指標和陣列的使用

2022-04-25 14:09:27 字數 2365 閱讀 1376

同種型別的結構體是可以進行賦值的

結構體陣列

(1)結構體陣列的定義

1)具有相同結構體型別的結構體變數也可以組成陣列,稱它們為結構體陣列。

結構體陣列的每乙個陣列元素都是結構體型別的資料,它們都分別包括各個成員(分量)項。

2)定義結構體陣列的方法和定義結構體變數的方法相仿,只需說明其為陣列即可。

可以採用三種方法:

a. 先定義結構體型別,再用它定義結構體陣列。

結構體陣列的定義形式如下:

struct 結構體名

;struct 結構體名

例如:struct student

;struct student stu[3];

b. 在定義結構體型別同時定義結構體陣列。

結構體陣列的定義形式如下:

struct 結構體名

陣列名[元素個數];

例如:struct student

stu[3];

c. 直接定義結構體陣列

結構體陣列的定義形式如下:

struct //沒有結構體名

陣列名[元素個數];

例如:struct

stu[3];

(2)結構體陣列的初始化

結構體陣列在定義的同時也可以進行初始化,並且與結構體變數的初始化規定相同,

只能對全域性的或靜態儲存類別的結構體陣列初始化。

結構體陣列初始化的一般形式是:

struct 結構體名

;struct 結構體名 陣列名[元素個數]=;

或者:struct 結構體名

陣列名[元素個數]=;

由於結構體變數是由若干不同型別的資料組成,而結構體陣列又是由若干結構體變數組成。

所以要特別注意包圍在大括號中的初始資料的順序,以及它們與各個成員項間的對應關係。

(3)結構體陣列的使用

乙個結構體陣列的元素相當於乙個結構體變數,因此前面介紹的有關結構體變數的規則也適應於結構體陣列元素。

以上面定義的結構體陣列stu[3]為例說明對結構體陣列的引用:

1)引用某一元素中的成員。

若要引用陣列第二個元素的name成員,則可寫為:

stu[1].name

2)可以將乙個結構體陣列元素值賦給同一結構體型別的陣列中的另乙個元素,或賦給同一型別的變數。

如:struct student stu[3],student1;

現在定義了乙個結構體型別的陣列,它有3個元素,又定義了乙個結構體型別變數student1,則下面的賦值是合法的。

student1=stu[0];

stu[0]=stu[1];

stu[1]=student1;

3)不能把結構體陣列元素作為乙個整體直接進行輸入輸出。如:

printf(「…」,stu[0]);

或scanf(「…」,&stu[0]);

都是錯誤的。

只能以單個成員為物件進行輸入輸出,如:

scanf(「…」,stu[0].name);

scanf(「…」,&stu[1].num);

printf(「…」,stu[0].name);

printf(「…」,stu[1].num);

(4)結構體指標

可以設定乙個指標變數用來指向乙個結構體變數。此時該指標變數的值是結構體變數的起始位址,該指標稱為結構體指標。

結構體指標與前面介紹的各種指標變數在特性和方法上是相同的。與前述相同,在程式中結構體指標也是通過訪問目標運算「*」訪問它的物件。

結構體指標在程式中的一般定義形式為:

struct 結構體名 *結構指標名;

其中的結構體名必須是已經定義過的結構體型別。

例如,對於上一節中定義的結構體型別struct student,

可以說明使用這種結構體型別的結構指標如下:

struct student *pstu;

其中pstu是指向struct student結構體型別的指標。結構體指標的說明規定了它的資料特性,並為結構體指標本身分配了一定的記憶體空間。

但是指標的內容尚未確定,即它指向隨機的物件。

當表示指標變數p所指向的結構體變數中的成員時,「(*結構體指標名).成員名」這種表示形式總是需要使用圓括號,顯得很不簡鍊。

因此,對於結構體指標指向的結構體成員項,給出了另外一種簡潔的表示方法,如下表示:

結構體指標名->成員名

它與前一種表示方法在意義上是完全等價的。

例如,結構體指標p指向的結構體變數中的成員name可以表示如下:

(*p).name 或 p->name

關於結構體和陣列

define crt secure no warnings include intmain void d d d1 d2 d3 d data 3 printf d n data 2 printf d data 2 結構體型別的陣列值得注意的有 1.陣列中的每個元素都是結構體 例如 班裡的每個同學組成...

指標陣列和陣列指標的使用

問題 程式找錯or程式結果 include int main char p str 1 str 0 p 2 str 1 p 1 str 2 p 1 3 str 3 p 0 str 2 str 1 printf s n str 0 空 printf s n str 1 shenyang printf ...

陣列指標 結構體指標

指向指標結構體 include include int main struct student stu 1 定義struct student型別的變數stu1 struct student p 定義指向struct student型別資料的指標變數p p stu 1 p指向stu1 stu 1.nu...