看你的需要了,有時不用指針作為參數(shù)達不到你要的效果,比如一個swap()函數(shù)。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比且末網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式且末網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋且末地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
int
swap(int
a,int
b)
{
int
tmp;
tmp=a;
a=b;
b=tmp;
}
如果你想調(diào)用該函數(shù)交換兩個變量的值,在主函數(shù)中輸出,那是不可能的。比如這樣調(diào)用:
int
x=1,y=2;
swap(x,y);
printf("%d
%d",x,y);
你認為會輸出2
1嗎?錯!還是會輸出1
2的。因為傳入swap()函數(shù)的只是x,y的拷貝,而不是它們自身。
如果要真正達到交換的目的,就要用指針傳值。這樣定義函數(shù):
void
swap(int
*a,int
*b)
{
int
tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
但是給函數(shù)傳值時要注意,指針是指向地址的,所以參數(shù)要是地址,即需要給變量取地址。
int
x=1,y=2;
swap(x,y);
printf("%d
%d",x,y);
這樣就是輸出2
1了!
#include?stdio.h
int?*fmax(int?*,int?*);????/*函數(shù)的聲明和下面的定義參數(shù)類型不一致,應該改成指針類型*/
void?main()
{
int?x,y;int?*c,*d;
int?*pmax;
scanf("%d%d",x,y);
c=x;
d=y;
pmax=fmax(c,d);
printf("max=%d\n",*pmax);
printf("max=%d\n",*pmax);
}
int?*fmax(int?*a,int?*b)
{
int?*p;
p=*a*b?a:b;
return?p;
}
選D
因為第一個參數(shù)是地址傳遞,fun(b,a);中傳入a字符。*c=*c+1將c的值變?yōu)閎字符。主函數(shù)的值改變。
第二個參數(shù)是值傳遞,所以在函數(shù)中d的值為B字符。但是并不影響主函數(shù)的值,所以主函數(shù)輸出a的值是A。b的值是b。
改成下面代碼看看:
#include?stdio.h
void?abc(int?*i,int?*j)
{
int?m;
m=*i;?//指針變量的值也就是地址不能賦值給一般變量
*i=*j;//*i,*j才是指針變量指向的變量的值
*j=m;???
}
void?main()
{
int?a,b;
int?*pa=a,*pb=b;
printf("請輸入a,b的值:");
scanf("%d,%d",a,b);
abc(pa,pb);??//
printf("a=%d\tb=%d\n",a,b);
}
您好,針對這個問題
Status
InOrderTraverse(BiTree
T
,Status(*Visit)(TElemType
e))函數(shù)中第2個參數(shù)是一個指向函數(shù)的指針,這樣做的目的是為了程序的靈活性。試想如果給你一個整型數(shù)100,要求分別按照10進行、16進制輸出,你可以寫一個輸出10進制函數(shù)與輸出16進制函數(shù),當你有需要輸出16進制時,只需要將16進制函數(shù)地址傳給Visit就行,而不需要改變InOrderTraverse函數(shù),這種做法靈活,也符合軟件工程編程思想。
另外,InitStack(S);
就是函數(shù)調(diào)用,這種就在InOrderTraverse已經(jīng)寫死了,如果有幾種初始化情況的話,就得在InOrderTraverse增加判斷條件來加以區(qū)分,這樣增加了代碼量。
希望我的回答對您幫助!
函數(shù)定義和函數(shù)調(diào)用是兩個概念,函數(shù)定義 為f(int *arr),表示參數(shù)是一個整型指針,因此使用該函數(shù)時要傳遞一個地址,如變量int a=0; 調(diào)用函數(shù)f傳遞a的地址時需要寫為f(a);而對于數(shù)組來說,如int b[]=[1,2,3], b本身就是數(shù)組首元素的地址,因此調(diào)用函數(shù)f傳遞數(shù)組首地址需要寫為f(b)。