【原创】指针变量作为函数参数要点注意+main函数中值是否改变

指针变量作为函数参数要点注意(已写至笔记)
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;
}

你可能感兴趣的:(c语言,算法)