并不是不規(guī)范的問題,你子程序?qū)懛ㄖ荒茉谧映绦蛑休敵稣_的數(shù)據(jù),而在主函數(shù)中無法得到交換過的x和y的值。參考程序運用指針讓子程序去讀寫a和b的值,在子程序執(zhí)行完成后,a和b的值確實得到了交換。
創(chuàng)新互聯(lián)2013年至今,先為浦口等服務(wù)建站,浦口等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為浦口企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
你的程序中子程序采用的不是指針類型參數(shù),這樣子程序無法將交換過后的值傳回來。
有多處錯誤,主程序中只有一處,但調(diào)用函數(shù)錯得挺多的,最主要的是對結(jié)構(gòu)指針的運用,
stu *p 下,引用其數(shù)組不能用(*p)[xx],因為p本身就是結(jié)構(gòu)數(shù)組的首址,所以直接用p[xx]即可訪問定義的所有單元。
以下將你的程序依原風(fēng)格進行修改,主程序中將修改前的錯誤代碼羅列于右,而order函數(shù)因為修改的地方多所以不再提示修改處:
#includestdio.h
typedef struct student
{
int num;
char name[20];
int a,b,c;
double ave;
}stu;
stu order(stu *p,int n);
int main()
{
stu s[6]; /*改為s[5]*/
int i;
for(i=0;i5;i++)
{
printf("input num:");
scanf("%d",s[i].num);
getchar();
printf("name:");
scanf("%s",s[i].name); /*原為scanf("%s",s[i].name); */
printf("a\tb\tc\n");
scanf("%d%d%d",s[i].a,s[i].b,s[i].c); s[i].ave=(s[i].a+s[i].b+s[i].c)*1.0/3;
}
order(s,5);
printf("num\tname\ta\tb\tc\n");
for(i=0;i5;i++)
{
printf("%d\t%s\t%d\t%d\t%d\t%lf\n",s[i].num,s[i].name,s[i].a,s[i].b,s[i].c,s[i].ave);
}
return 0;
}
stu order(stu *p,int n)
{
int j,k;
stu index;
for(j=0;jn-1;j++)
for(k=j+1;kn;k++)
if(p[j].avep[k].ave)
{
index=p[j];
p[j]=p[k];
p[k]=index;
}
}
第
根據(jù)指針,
交換指針所指
數(shù)據(jù)
第二
雖
寫
使用"指針"
實現(xiàn),
實際
,
獎p1
p2兩
本
變量值進行交換,
并
獎兩
址所指向
內(nèi)存單元進行交換
第二
函數(shù)
吧所
int
*
都改
int,
能更清楚
看
底
干嘛
本文名稱:c語言子函數(shù)怎么調(diào)用指針 c語言子函數(shù)調(diào)用舉例
網(wǎng)站路徑:http://www.rwnh.cn/article4/ddchooe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站營銷、品牌網(wǎng)站制作、網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)