鄭州做旅游網(wǎng)站的公司百度公司官網(wǎng)
指針變量作為函數(shù)參數(shù)要點(diǎn)注意(已寫至筆記)
1傳參指針不加*(main中函數(shù))
2收參指針要加*(被main調(diào)用的函數(shù))
3傳參指針名可與收參指針名不同,不影響
4【問】如何看主函數(shù)中指針?biāo)竷?nèi)容是否改變
【答】調(diào)用函數(shù)中若未在改變傳入指針的指向值前改變指針指向(即未在改變*p前改變p指向),則主函數(shù)中指針?biāo)竷?nèi)容會變
【例1】如下代碼的swap函數(shù)交換了main中傳入的數(shù),指針變量作為函數(shù)參數(shù)往往都是想要達(dá)到這種效果
#include<stdio.h>void swap(int *q1,int *q2){ //接收指針類型參數(shù),故要加*(參數(shù)名可與main中不同,為體現(xiàn)此參數(shù)名寫q而非p) int tmp;tmp=*q1;*q1=*q2;*q2=tmp;
}int main()
{ int a[150];int tmp;for(int i=0;i<5;i++){scanf("%d",&a[i]); }//小到大排序,選擇排序 for(int i=0;i<4;i++){int minn=i; //minn存放最小數(shù)的下標(biāo) for(int j=i+1;j<5;j++){if(a[j]<a[minn]){minn=j;}} int *p1=&a[i];int *p2=&a[minn];swap(p1,p2); //傳參別加*,要傳地址才能變 }for(int i=0;i<5;i++){printf("%d ",a[i]);}return 0;
}
【例2】但也有少量為了出而出的題在調(diào)用函數(shù)中改變p前改變就了p指向,導(dǎo)致main中仍不變
·注意fun函數(shù)中的p=&b;此句改變p前就改變了p的指向,main中未變,若無此句main就變?yōu)?0
#include<stdio.h>void fun(int *p){ int b=10;p=&b; //改變*p前就改變了p的指向,main中未變(若無此句main就變?yōu)?0) *p=b;
}int main()
{int a=5,*p=&a;fun(p); printf("%d\n",a); //輸出*p的值同a沒變,5 return 0;
}