第一篇:C語言結(jié)構(gòu)體指針變量作函數(shù)參數(shù)
C語言結(jié)構(gòu)體指針變量作函數(shù)參數(shù)
在ANSI C標準中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進行傳送。這時現(xiàn)金網(wǎng)96y.org由實參傳向形參的只是地址,從而減少了時間和空間的開銷。
計算一組學生的平均成績和不及格人數(shù)。用結(jié)構(gòu)指針變量作函數(shù)參數(shù)編程。
struct stu{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,Li ping,M,45},{102,Zhang ping,M,62.5},{103,He fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58}
};
main(){
struct stu *ps;
void ave(struct stu *ps);
ps=boy;
ave(ps);
}
void ave(struct stu *ps){
int c=0,i;
float ave,s=0;
for(i=0;i5;i++,ps++){
s+=ps-score;
if(ps-score60)c+=1;
}
printf(s=%fn,s);
ave=s/5;
printf(average=%fncount=%dn,ave,c);
}
本程序中定義了函數(shù)ave,其形參為結(jié)構(gòu)指針變量ps。boy被定義為外部結(jié)構(gòu)數(shù)組,因此在整個源程序中有效。在main函數(shù)中定義說明了結(jié)構(gòu)指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后博彩娛樂棋牌q07i5.org以ps作實參調(diào)用函數(shù)ave。在函數(shù)ave中完成計算平均成績和統(tǒng)計不及格人數(shù)的工作并輸出結(jié)果。
由于本程序全部采用指針變量作運算和處理,故速度更快,程序效率更高。
第二篇:C語言函數(shù)指針變量
C語言函數(shù)指針變量
在C語言中,一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū),而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。我們可以把函數(shù)的這個首地址(或稱入口地址)賦予一個指針變量,使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個函數(shù)。我們把這種指向函數(shù)的指針變量稱為函數(shù)指針變量。
函數(shù)指針變量定義的一般形式為:
類型說明符(*指針變量名)();其中類型說明符表示現(xiàn)金網(wǎng)96y.org被指函數(shù)的返回值的類型。(* 指針變量名)表示*后面的變量是定義的指針變量。最后的空括號表示指針變量所指的是一個函數(shù)。例如:
int(*pf)();
表示pf是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。
本例用來說明用指針形式實現(xiàn)對函數(shù)調(diào)用的方法。
int max(int a,int b){
if(ab)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf(input two numbers:n);
scanf(%d%d,x,y);
z=(*pmax)(x,y);
printf(maxmum=%d,z);
}
從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:
先定義函數(shù)指針變量,如后一程序中第9行 int(*pmax)();定義 pmax為函數(shù)指針變量。
把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第11行 pmax=max;
用函數(shù)指針變量形式調(diào)用函數(shù),如程序第14行 z=(*pmax)(x,y);
調(diào)用函數(shù)的一般形式為:(*指針變量名)(實參表)
使用函數(shù)指針變量還應(yīng)注意以下兩點:
函數(shù)指針變量不能進行算術(shù)運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而博彩娛樂棋牌q07i5.org函數(shù)指針的移動是毫無意義的。
函數(shù)調(diào)用中(*指針變量名)的兩邊的括號不可少,其中的*不應(yīng)該理解為求值運算,在此處它只是一種表示符號。
第三篇:C語言結(jié)構(gòu)體與指針實驗
實驗一 C語言結(jié)構(gòu)體與指針
一、實驗內(nèi)容
1)學生信息的顯示,具體要求如下: ??定義一個結(jié)構(gòu)體描述學生信息(學號,姓名,性別,年齡,住址); ??設(shè)計一個函數(shù),用于顯示單個學生信息,函數(shù)的參數(shù)為前面定義的結(jié)構(gòu)體類型; ??設(shè)計一個主函數(shù),在主函數(shù)中輸入學生的信息,并調(diào)用前面定義的函數(shù)進行顯示(學生人數(shù)不少于5人)。
2)輸入若干個整數(shù)作為數(shù)組元素值,然后按輸入時順序的就地逆置排序,最后打印出逆置后的元素值。要求用指針和動態(tài)內(nèi)存分配方法實現(xiàn)。例如 輸入:10 2 30 4 5,逆置后顯示為:5 4 30 2 10。
二、代碼
1)#include
struct Student { int studentID;char name[20];char sex[2];//m=male f=female int age;char address[50];};
void showTheDetail(struct Student s){ printf(“%dn”,s.studentID);printf(“%sn”,s.name);printf(“%sn”,s.sex);printf(“%dn”,s.age);printf(“%snn”,s.address);}
void main(){ int i;struct Student student[5];for(i=0;i<5;i++){
printf(“student%dn”,i);
scanf(“%d”,&student[i].studentID);
}
scanf(“%s”,&student[i].name);scanf(“%s”,&student[i].sex);scanf(“%d”,&student[i].age);scanf(“%s”,&student[i].address);} for(i=0;i<5;i++){ showTheDetail(student[i]);} 2)#include
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
return;}
int main(){
int n,i;printf(“please insert the amount of the numbers:n”);scanf(“%d”,&n);int array[n];printf(“please insert the numbers:n”);for(i=0;i scanf(“%d”,&array[i]);} change(array,n);for(i=0;i printf(“%d”,array[i]);} } 三、心得體會 復習了c語言中的數(shù)組,結(jié)構(gòu)體的知識,編程中沒有出現(xiàn)問題。 C語言指向結(jié)構(gòu)體數(shù)組的指針 指針變量可以指向一個結(jié)構(gòu)數(shù)組,這時結(jié)構(gòu)指針變量的值是整個結(jié)構(gòu)數(shù)組的首地址。結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個元素,這時結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。 設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。這與普通數(shù)組的情況現(xiàn)金網(wǎng)96y.org是一致的。 用指針變量輸出結(jié)構(gòu)數(shù)組。 struct stu{ int num; char *name; char sex; float score; }boy[5]={ {101,Zhou ping,M,45},{102,Zhang ping,M,62.5},{103,Liou fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58} }; main(){ struct stu *ps; printf(NotNametttSextScoretn); for(ps=boy;psboy+5;ps++) printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score); } 在程序中,定義了stu結(jié)構(gòu)類型的外部數(shù)組boy并作了初始化賦值。在main函數(shù)內(nèi)定義ps為指向stu類型的指針。在循環(huán)語句for的表達式1中,ps被賦予boy的首地址,然后循環(huán)5次,輸出boy數(shù)組中各成員值。 應(yīng)該注意的是,一個結(jié)構(gòu)指針變量雖然可以用來訪問結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組元素的成員,但是,不能博彩公司排名q07i5.org使它指向一個成員。也就是說不允許取一個成員的地址來賦予它。因此,下面的賦值是錯誤的。 ps=boy[1].sex; 而只能是: ps=boy;(賦予數(shù)組首地址) 或者是: ps=boy[0];(賦予0號元素首地址) C++的struct和class差別很小,其實class就是從struct發(fā)展出來的。struct定義的結(jié)構(gòu)體在C++中也是一個類,結(jié)構(gòu)體可以有class的任何東西 struct AA { public: int a; int b; private: int a; int b; protected: int GetA()const; void SetA(); public: int GetB()const; AA & operator=(const AA & a); public: AA(); AA(const AA & a); }; 可以看到struct和class沒有區(qū)別,唯一的區(qū)別是,如果沒有寫public、private等,struct缺省是公有成員,class缺省是私有的。第四篇:C語言指向結(jié)構(gòu)體數(shù)組的指針
第五篇:結(jié)構(gòu)體的構(gòu)造函數(shù)