指针变量作为函数参数要点注意(已写至笔记)
1传参指针不加*(main中函数)
2收参指针要加*(被main调用的函数)
3传参指针名可与收参指针名不同,不影响
4【问】如何看主函数中指针所指内容是否改变
【答】调用函数中若未在改变传入指针的指向值前改变指针指向(即未在改变*p前改变p指向),则主函数中指针所指内容会变
【例1】如下代码的swap函数交换了main中传入的数,指针变量作为函数参数往往都是想要达到这种效果
#include
void swap(int *q1,int *q2){ //接收指针类型参数,故要加*(参数名可与main中不同,为体现此参数名写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存放最小数的下标
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】但也有少量为了出而出的题在调用函数中改变p前改变就了p指向,导致main中仍不变
·注意fun函数中的p=&b;此句改变p前就改变了p的指向,main中未变,若无此句main就变为10
#include
void fun(int *p){
int b=10;
p=&b; //改变*p前就改变了p的指向,main中未变(若无此句main就变为10)
*p=b;
}
int main()
{
int a=5,*p=&a;
fun(p);
printf("%d\n",a); //输出*p的值同a没变,5
return 0;
}