对C语言 结构数组 指向结构变量的指针 指向结构数组的指针
一、結構數組的定義
數組的元素可以是結構類型的。結構數組的每一個元素都是具有相同的結構類型的下標結構變量。在實際應用中,經常用結構數組來表示具有相同數據結構的一個群體。
如:一個班的學生的檔案,一個車間職工的工資等。
struct stu{Int num;char *name;char sex[20];float score;}boy[5];定義了一個結構數組boy,共有5個元素,boy[0]~boy[4].每個數組元素都有struct stu的結構形式。對數組結構可以做初始化賦值。
#include<stdio.h> struct stu {int num;char *name;char sex;float score; }boy[5] = {{101,"shi",'w',46},{102,"wen",'m',76},{103,"jie",'w',89.8},{104,"jier",'m',25},{105,"dada",'w',65},}; int main(int argc,char **argv) {int i;int c=0;float ave;float s = 0;for(i=0;i<5;i++) {s += boy[i].score;if (boy[i].score < 60){c+=1;}printf("num=%d,name=%s,sex=%c,score=%2.f\n",boy[i].num,boy[i].name,boy[i].sex,boy[i].score);}printf("s=%f\n",s);ave = s/5;printf("ave=%f\ncount=%d\n",ave,c);return 0; }本例程序中定義了一個外部結構數組boy,總共5個元素,并做了初始化賦值。在main函數中用for語句逐漸累加各個元素的score,成員值存于s之中,如score的值小于60(不及格)即計數器C加1,循環完畢后計算平均成績,并輸出全班總分,平均分以及不及格人數。
二、指向結構變量的指針
一個指針變量當用來指向一個結構變量時,稱之為結構指針變量。結構指針變量的值指向的是結構變量的首地址。
通過結構指針即可訪問該結構變量。
結構指針變量的說明一般的格式為: ? ?
? ? ? ? Struct stu *pstu;
訪問的一般形式為:
結構指針變量->成員名
例如:(*pstu).num;
或者是:
Pstu->num;
/*
結構指針變量的具體說明和使用方法
*/
/*
本例程序中定義了一個結構體stu,定義了類型結構變量boy1并做了初始化賦值,還定義了一個指向stu類型結構的指針變量pstu。在main函數中,pstu被賦予boy1的地址,因此pstu指向boy1,。然后在printf語句中用三種形式的輸出boy1的各個成員值。
從運算結果可以看出:
結構變量.成員名
(*結構指針變量).成員名
結構指針變量->成員名
*/
#include<stdio.h> struct stu {int num;char name[20];char sex;float score; }boy1 = {102,"shi wen jie",'w',48},*pstu; int main(int argc,char **argv) {pstu = &boy1;printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",boy1.num,boy1.name,boy1.sex,boy1.score);printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).score);printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",pstu->num,pstu->name,pstu->sex,pstu->score);return 0; }三、指向結構數組的指針
指針變量可以指向一個結構數組,這時結構指針變量的值是整個結構數組的首地址。結構指針變量也可以指向結構數組的一個元素,這時的結構指針變量的值是該結構數組元素的首地址。
***ps為指向結構數組的指針變量,則ps也是指向該結構數組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。
/*
在程序中定義了stu結構類型的外部數組boy并做了初始化賦值。在main中定義了ps為指向stu類型的指針。在循環語句for的表達式1中,ps被賦予boy的首地址,然后循環5次,輸出boy中數組中的成員值。
*/
/* 用指針變量輸出結構數組 */ #include<stdio.h> struct stu {int num;char name[8];char sex;float score; }boy[5] = {{101,"shi",'w',65},{102,"wen",'m',89},{103,"jie",'w',86}, {104,"jie jie",'m',70},{105,"hi",'m',76},}; int main(int argc,char **argv) {struct stu *ps;printf("num\tname\tsex\tscore\n");for(ps=boy;ps<boy+5;ps++){printf("%d\t%s\t%c\t%f\n",ps->num,ps->name,ps->sex,ps->score);}return 0; }***可以看出?結構指針變量可以訪問結構變量或結構數組元素的成員,但是不能使他指向一個成員。也就是說,不允許取一個成員的地址來賦予它。
錯誤的:ps ?= ?&boy[1].sex;
正確的:ps ?= boy;(賦予數組首地址) ?????ps = &boy[0];(賦予0號元素首地址)
總結
以上是生活随笔為你收集整理的对C语言 结构数组 指向结构变量的指针 指向结构数组的指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对C语言 结构体 和 结构变量
- 下一篇: 对C语言 结构指针变量做函数的参数 结构