這說明你對指針和函數參數傳遞的理解不到位
成都創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于網站建設、成都做網站、烏達網絡推廣、小程序開發、烏達網絡營銷、烏達企業策劃、烏達品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯為所有大學生創業者提供烏達建站搭建服務,24小時服務熱線:028-86922220,官方網址:vcdvsql.cn
這個程序里你想用函數F改變p,那么就要給F傳遞p的地址,p的類型是int*,那么它的的地址類型是int**,傳遞p給F:
int?main()
{
void?F(int?**p);????//int**
int?*p=NULL;
F(p);?????//傳地址
printf("%d",*p);
delete?p;????//釋放
return?0;
}
void?F(int?**p)???//int**
{
*p=new?int;???
**p=1;
}
或者用C++的引用:
int?main()
{
void?F(int?*p);????//int*
int?*p=NULL;
F(p);?????//這里就是引用了
printf("%d",*p);
delete?p;????//釋放
return?0;
}
void?F(int?*p)???//int*
{
p=new?int;???
*p=1;
}
其實,函數指針確實不是“指向函數的指針”
函數指針,就是函數指針,加不加*沒有實際意義。
二樓的那個:
c=(*p)(a,b);
也可以寫成
c=(****************************************************p)(a,b);
或者
c=p(a,b);
你說它指向什么?
PS,加*有特殊的用途,初學者就算了
并不是不規范的問題,你子程序寫法只能在子程序中輸出正確的數據,而在主函數中無法得到交換過的x和y的值。參考程序運用指針讓子程序去讀寫a和b的值,在子程序執行完成后,a和b的值確實得到了交換。
你的程序中子程序采用的不是指針類型參數,這樣子程序無法將交換過后的值傳回來。
第一條紅線是定義一個函數指針;
第二條紅線起強轉作用,把0xd010f0強轉為對應的函數指針類型
我寫的這個程序可以幫你理解...常量地址被printab取代~
#include?stdio.h
#include?stdlib.h
int?ave(int?n,int?*a);
int?main()
{
int?i,n,*a;
printf("please?input?number?n:");
scanf("%d",n);
a=(int?*)?malloc(n*sizeof(int));
printf("please?input?%d?numbers:\n",n);
for(i=0;in;i++)
scanf("%d",a+i);
printf("The?average?number?is?%d\n",ave(n,a));
}
int?ave(int?n,int?*a)
{
int?i,sum=0;
for(i=0;in;i++)
sum+=*(a+i);
return?sum/n;
}
標題名稱:c語言指針在調用函數 c語言指針調用函數求平均值
轉載注明:http://vcdvsql.cn/article14/hehoge.html
成都網站建設公司_創新互聯,為您提供網站導航、品牌網站建設、靜態網站、網頁設計公司、外貿建站、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯