第一篇:C語(yǔ)言指向結(jié)構(gòu)體數(shù)組的指針
C語(yǔ)言指向結(jié)構(gòu)體數(shù)組的指針
指針變量可以指向一個(gè)結(jié)構(gòu)數(shù)組,這時(shí)結(jié)構(gòu)指針變量的值是整個(gè)結(jié)構(gòu)數(shù)組的首地址。結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個(gè)元素,這時(shí)結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。
設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號(hào)元素,ps+1指向1號(hào)元素,ps+i則指向i號(hào)元素。這與普通數(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)語(yǔ)句for的表達(dá)式1中,ps被賦予boy的首地址,然后循環(huán)5次,輸出boy數(shù)組中各成員值。
應(yīng)該注意的是,一個(gè)結(jié)構(gòu)指針變量雖然可以用來(lái)訪問(wèn)結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組元素的成員,但是,不能博彩公司排名q07i5.org使它指向一個(gè)成員。也就是說(shuō)不允許取一個(gè)成員的地址來(lái)賦予它。因此,下面的賦值是錯(cuò)誤的。
ps=boy[1].sex;
而只能是:
ps=boy;(賦予數(shù)組首地址)
或者是:
ps=boy[0];(賦予0號(hào)元素首地址)
第二篇:C語(yǔ)言結(jié)構(gòu)體與指針實(shí)驗(yàn)
實(shí)驗(yàn)一 C語(yǔ)言結(jié)構(gòu)體與指針
一、實(shí)驗(yàn)內(nèi)容
1)學(xué)生信息的顯示,具體要求如下: ??定義一個(gè)結(jié)構(gòu)體描述學(xué)生信息(學(xué)號(hào),姓名,性別,年齡,住址); ??設(shè)計(jì)一個(gè)函數(shù),用于顯示單個(gè)學(xué)生信息,函數(shù)的參數(shù)為前面定義的結(jié)構(gòu)體類型; ??設(shè)計(jì)一個(gè)主函數(shù),在主函數(shù)中輸入學(xué)生的信息,并調(diào)用前面定義的函數(shù)進(jìn)行顯示(學(xué)生人數(shù)不少于5人)。
2)輸入若干個(gè)整數(shù)作為數(shù)組元素值,然后按輸入時(shí)順序的就地逆置排序,最后打印出逆置后的元素值。要求用指針和動(dòng)態(tài)內(nèi)存分配方法實(shí)現(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]);} } 三、心得體會(huì) 復(fù)習(xí)了c語(yǔ)言中的數(shù)組,結(jié)構(gòu)體的知識(shí),編程中沒(méi)有出現(xiàn)問(wèn)題。 講授 9.6二維數(shù)組和指針 2課時(shí) 掌握二維數(shù)組的地址表示方法 掌握指向數(shù)組元素的指針變量 掌握指向數(shù)組元素的指針變量 掌握用指向由m個(gè)元素組成的一維數(shù)組的指針變量 指向一維數(shù)組的指針變量 無(wú) 作業(yè)見(jiàn)后 一、二維數(shù)組的地址 例:定義二維數(shù)組int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 則二維數(shù)組a是數(shù)組的數(shù)組,由3個(gè)一維數(shù)組所組成的,即3個(gè)元素:a[0],a[1],a[2]。而每個(gè)元素又是一個(gè)一維數(shù)組。 二、指向二維數(shù)組元素的指針變量 1、指向數(shù)組元素的指針變量 例1 用指向元素的指針變量輸出二維數(shù)組元素的值 #include { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } }用指向由m個(gè)元素組成的一維數(shù)組的指針變量 例2 輸出二維數(shù)組任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: ?指向一維數(shù)組的指針變量的定義格式應(yīng)寫(xiě)成:基類型(*p)[N] ?上述語(yǔ)句int(*p)[4],代表p是一個(gè)指針變量,它指向包含4個(gè)整型元素的一維數(shù)組。*p兩側(cè)的小括號(hào)不可少,如果寫(xiě)成*p[4],由于[]運(yùn)算級(jí)別高于*,*p[4]是指針數(shù)組。 ?p=a;表明p指向數(shù)組a中的第0行,此時(shí)p+1不是指向a[0][1],而是指向a[1],p的增值以一維數(shù)組的長(zhǎng)度為單位,p+1地址就增加了8個(gè)字節(jié)。*(p+i)+j是a[i][j]的地址,這里的i是以一維數(shù)組的長(zhǎng)度為單位,j則是以數(shù)組元素的長(zhǎng)度為單位的。 復(fù)習(xí) 新授 講授 復(fù)習(xí)默寫(xiě) 1、選擇排序的基本思想 2、從鍵盤(pán)輸入5個(gè)整數(shù),使用選擇法從小到大排序,編程實(shí)現(xiàn)。 一、二維數(shù)組的地址 例:定義二維數(shù)組int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 則二維數(shù)組a是數(shù)組的數(shù)組,由3個(gè)一維數(shù)組所組成的,即3個(gè)元素:a[0],a[1],a[2]。而每個(gè)元素又是一個(gè)一維數(shù)組。設(shè)二維數(shù)組的首行的首地址為2000,則: 二、指向二維數(shù)組元素的指針變量 1、指向數(shù)組元素的指針變量 例1 用指向元素的指針變量輸出二維數(shù)組元素的值 #include { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } } 注意:上例中如果對(duì)p賦值p=a[0];不能寫(xiě)成 p=a;因?yàn)榇藭r(shí)a 是行指針,而p是列指針只能指向一個(gè)整型變量,a[0]是第0行的數(shù)組名,即第0行的首地址就是a[0][0]的地址。請(qǐng)學(xué)生思考上述賦值語(yǔ)句還可以寫(xiě)成什么? p=*a;p=&a[0][0];用指向由m個(gè)元素組成的一維數(shù)組的指針變量 例2 輸出二維數(shù)組任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: ?指向一維數(shù)組的指針變量的定義格式應(yīng)寫(xiě)成:基類型(*p)[N] ?上述語(yǔ)句int(*p)[4],代表p是一個(gè)指針變量,它指向包含4個(gè)整型元素的一維數(shù)組。*p兩側(cè)的小括號(hào)不可少,如果寫(xiě)成*p[4],由于[]運(yùn)算級(jí)別高于*,*p[4]是指針數(shù)組。 小結(jié) 作業(yè) ?p=a;表明p指向數(shù)組a中的第0行,此時(shí)p+1不是指向a[0][1],而是指向a[1],p的增值以一維數(shù)組的長(zhǎng)度為單位,p+1地址就增加了8個(gè)字節(jié)。*(p+i)+j是a[i][j]的地址,這里的i是以一維數(shù)組的長(zhǎng)度為單位,j則是以數(shù)組元素的長(zhǎng)度為單位的。 例3: int(*t)[4],a[3][4]={{1,3,5,7}, {11,13,15,17},{21,23,25,27}};t = a;printf(“%d,%d”, **t, t[1][2]);t++;t++;printf(“%d”, **t); 運(yùn)行結(jié)果:1,1521 【課堂小練習(xí)】 1、[2010.3.27]若有:int(*p)[3];則正確的是(D)A)定義了基類型為int的三個(gè)指針變量 B)p是基類型為int的具有三個(gè)元素的指針數(shù)組 C)定義了名為*p,具有三個(gè)元素的整型數(shù)組 D)定義了一個(gè)名為p的指針變量,它可以指向每行有三個(gè)整數(shù)元素的二維數(shù)組 2、輸入:1 2 3<回車(chē)>,則輸出結(jié)果是 int a[3][2]={0},(*p)[2],i,j;p=a;for(i=0;i<2;i++){ scanf(“%d”,p);p++;} for(i=0;i<3;i++)for(j=0;j<2;j++)printf(“%d”,a[i][j]); 1、二維數(shù)組的地址 2、指向數(shù)組元素的指針變量 3、指向一維數(shù)組的指針變量 1、整理課堂筆記 2、完成深入研究整型指針練習(xí)題 C語(yǔ)言結(jié)構(gòu)體指針變量作函數(shù)參數(shù) 在ANSI C標(biāo)準(zhǔn)中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行整體傳送。但是這種傳送要將全部成員逐個(gè)傳送,特別是成員為數(shù)組時(shí)將會(huì)使傳送的時(shí)間和空間開(kāi)銷(xiāo)很大,嚴(yán)重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數(shù)參數(shù)進(jìn)行傳送。這時(shí)現(xiàn)金網(wǎng)96y.org由實(shí)參傳向形參的只是地址,從而減少了時(shí)間和空間的開(kāi)銷(xiāo)。 計(jì)算一組學(xué)生的平均成績(jī)和不及格人數(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ù)組,因此在整個(gè)源程序中有效。在main函數(shù)中定義說(shuō)明了結(jié)構(gòu)指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后博彩娛樂(lè)棋牌q07i5.org以ps作實(shí)參調(diào)用函數(shù)ave。在函數(shù)ave中完成計(jì)算平均成績(jī)和統(tǒng)計(jì)不及格人數(shù)的工作并輸出結(jié)果。 由于本程序全部采用指針變量作運(yùn)算和處理,故速度更快,程序效率更高。 C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)七:函數(shù)、數(shù)組、指針 1、程序運(yùn)行后,用戶任意輸入一個(gè)字符串,求出字符串長(zhǎng)度,然后輸出字符串內(nèi)容及個(gè) 數(shù)。不能使用strlen函數(shù)。 求字符串長(zhǎng)度函數(shù)的函數(shù)原型必須如下: int MyStrLenPt(char *str) 若輸入:nihao123! 則輸出:nihao123!:9 chars2、編寫(xiě)一個(gè)對(duì)一維數(shù)組進(jìn)行排序的程序。 要求: 寫(xiě)兩個(gè)函數(shù),一個(gè)主函數(shù),一個(gè)sort函數(shù)。在主函數(shù)中完成數(shù)組的輸入和輸出,通過(guò)調(diào) 用sort函數(shù)對(duì)數(shù)組進(jìn)行排序。 sort函數(shù)的原型為:voidsort(int*p, intn); 說(shuō)明: (1)請(qǐng)大家按學(xué)號(hào)來(lái)坐,便于考勤和管理。 (2)請(qǐng)珍惜寶貴的實(shí)驗(yàn)時(shí)間!不要做與實(shí)驗(yàn)無(wú)關(guān)的事情,比如聊QQ、上網(wǎng)或打游戲。 (3)直接把C語(yǔ)言代碼粘貼到相應(yīng)的實(shí)驗(yàn)題目下方,上交實(shí)驗(yàn)報(bào)告時(shí)只交word文檔。 (4)文檔名稱:班級(jí)+學(xué)號(hào)后2位+姓名+實(shí)驗(yàn)編號(hào),例如11電1班12張山實(shí)驗(yàn)七.doc。第三篇:c語(yǔ)言 二維數(shù)組與指針 教案
第四篇:C語(yǔ)言結(jié)構(gòu)體指針變量作函數(shù)參數(shù)
第五篇:C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)七:函數(shù)、數(shù)組、指針