指向結構體型別資料的指標

2021-09-30 05:42:40 字數 1454 閱讀 2140

第六節 指向結構體型別資料的指標

三、用指向結構體的指標作函式引數

有時想將乙個結構體變數的值傳給另乙個函式,但原來的c標準不允許用結構體變數作為函式引數。那麼用什麼方法來解決這個問題呢?有兩個方法:

①用結構體變數的成員作引數。例如,用stu[2].name作函式實參,將實參值傳給形參。用法和用普通變數作實參是一樣的,屬「值傳遞」方式。

②用指向結構體變數(或陣列)的指標作實參,將結構體變數(或陣列)的位址傳給開參。

[例8.5] 有乙個結構體變數stu.內含學生學號、姓名和三門課的成績。要求在main函式中賦以值,在另一函式print中將它們列印輸出。

#include "string.h"

#define format"%d/n%s/n%f/n%f/n"

struct student

; main()

void print(p)

struct student *p;

執行結果為:

12345

li li

67.500000

89.000000

78.599998

struct student 被定義為外部型別,這樣,同一原始檔中的各個函式都可以用它來定義變數的型別。main函式中的stu變數定義為struct student 型別,print函式中的形參這被定義為指向struct student型別資料的指標變數。在main函式中對stu的各成員賦值。注意在呼叫函時,用&stu作實參,&stu是結構體變數stu的位址。在呼叫函式時將該位址傳送給形參p(p是指標變數)。這樣p就指向stu。在print函式中輸出p所指向的結構體變數的各個成員值,它們也就是stu的成員值。

main函式中的對各成員賦值也可以改用scanf函式輸入。即用scanf("%d %s %f %f %f",&stu.num,stu.name,&stu.score[1],&stu.score[2]);

輸入時用下面形式輸入:

12345 lili 67.5 89 78.6

注意: 輸入項表列中stu.name前沒有「&"符號,因為stu.name是字元陣列名本身代表位址,不應寫成&stu.name。

ansi c允許用整個結構體作為函式的引數傳遞,但是必須保證實參與形參的型別相同。例10.5中main函式中最後一行呼叫print函式,也可改用print(stu); 即實參改用結構體變數(而不是指標)。同時print函式也應相應改為:

void print(stud)

struct student stud;

把乙個完整的結構體變數作為引數傳遞,雖然合法,但要將全部成員值乙個乙個傳遞,費時間又費空間,開銷大。如果結構體型別中的成員很多,或有一些成員是陣列,則程式執行效率會大大降低。在這種情況下,用指標作函式引數比較好,能提高執行效率。

指向結構體型別資料的指標

第六節 指向結構體型別資料的指標 三 用指向結構體的指標作函式引數 有時想將乙個結構體變數的值傳給另乙個函式,但原來的c標準不允許用結構體變數作為函式引數。那麼用什麼方法來解決這個問題呢?有兩個方法 用結構體變數的成員作引數。例如,用stu 2 name作函式實參,將實參值傳給形參。用法和用普通變數...

指向結構體的指標和指向結構體指標的指標

剛才用結構體的指標,操作記憶體出錯了,記錄一下。struct t ptr 是指向乙個結構體的指標,也可以當做乙個結構體陣列來用。可以把結構體當做 int 來看,int 型別即可以指向乙個整數,也可以指向陣列。struct t ptr,說白了 就是乙個結構體指標的陣列,陣列內都是指標,還要分配記憶體。...

指向結構體的指標和指向結構體指標的指標

例如,struct t ptr 是指向乙個結構體的指標,也可以當做乙個結構體陣列來用。可以把結構體當做 int 來看,int 型別即可以指向乙個整數,也可以指向陣列。struct t ptr,說白了 就是乙個結構體指標的陣列,陣列內都是指標,還要分配記憶體。1,結構體指標用法一 strusysinf...