指向結構體的指標

2021-07-09 10:07:11 字數 2234 閱讀 9265

建立結構體指標是極常見的。下面是乙個例子:

typedef struct

rec;

typedef rec *recpointer;

recpointer r;

r=(recpointer)malloc(sizeof(rec));

指向結構體的指標示意圖

r是乙個指向結構體的指標。請注意,因為r是乙個指標,所以像其他指標一樣占用4個位元組的記憶體。而malloc語句會從堆上分配45位元組的記憶體。*r是乙個結構體,像任何其他rec型別的結構體一樣。下面的**顯示了這個指標變數的典型用法:

strcpy((*r).name, 「leigh」);

strcpy((*r).city, 「raleigh」);

strcpy((*r).state, 「nc」);

printf(「%sn」, (*r).city);

free(r);

您可以像對待乙個普通結構體變數那樣對待r,但在遇到c的操作符優先順序問題時要小心。如果去掉*r兩邊的括號則**將無法編譯,因為「.」操作符的優先順序高於「」操作符。使用結構體指標時不斷地輸入括號是令人厭煩的,為此c語言引入了一種簡記法達到相同的目的:

strcpy(r->name, 「leigh」);

r->這種寫法和(*r).是完全等效的,但是省去了兩個字元。

指向陣列的指標

還可以建立指向陣列的指標,如下所示:

int *p;

int i;

p=(int *)malloc(sizeof(int[10]));

for (i=0; i<10; i++)

p[i]=0;

free(p);

或:

int *p;

int i;

p=(int *)malloc(sizeof(int[10]));

for (i=0; i<10; i++)

*(p+i)=0;

free(p);

指向整數陣列的指標示意圖

可見要建立指向整數陣列的指標,只需建立乙個普通的整數指標即可。呼叫malloc分配合適的陣列空間,然後將指標指向陣列的第乙個元素。訪問陣列元素既可以用普通的陣列下標也可以用指標運算。c將兩種方法視為是等效的。

指向陣列的指標這一技巧尤其適用於字串。您可以為某個特定大小的字串分配剛好合適的記憶體。

[例7-3] 在例7 - 2中定義了結構體型別,根據此型別再定義結構體陣列及指向結構體型別的指標。

struct data

; struct stu/定義結構體/

; struct stustudent[4],p; /定義結構體陣列及指向結構體型別的指標*/

作p=student,此時指標p就指向了結構體陣列student。

p是指向一維結構體陣列的指標,對陣列元素的引用可採用三種方法。

1)位址法

student+i和p+i均表示陣列第i個元素的位址,陣列元素各成員的引用形式為:

(student+i)->name、(student+i)->num和(p+i)->name、(p+i)->num等。student+i和p+i

與&student[i]意義相同。

2)指標法

若p指向陣列的某乙個元素,則p++就指向其後續元素。

3)指標的陣列表示法

若p=student,我們說指標p指向陣列student,p[i]表示陣列的第i個元素,其效果與

student[i]等同。對數組成員的引用描述為:p[i].name、p[i].num等。

[例7-4]指向結構體陣列的指標變數的使用。

structdata/定義結構體型別/

; structstu/定義結構體型別/

; main()

,, ,};

/定義結構體陣列並初始化/

p=student;/將陣列的首位址賦值給指標p,p指向了一維陣列student/

printf(「\n1—-outputname,number,year,month,day\n」);

for(i=0;i<4;i++)/採用指標法輸出陣列元素的各成員/

printf(「%20s%10ld%10d//%d//%d\n」,(p+i)->name,(p+i)->num,

(p+i)->birthday.year,(p+i)->birthday.month,

(p+i)->birthday.day);

}

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

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

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

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

指向結構體的指標

方式與定義指向其他型別變數的指標相似 struct books struct pointer struct pointer book1 struct pointer title 舉例1 include include using namespace std struct studentstu,stu...