指针传值

  • 定义一个交换数据的函数如下:
  • void Swap_err1(int a,int b)
    {
    	int tmp;
    	tmp = a;
    	a = b;
    	b = tmp;
    	printf("%d,%d\n",a,b);
    }
    int main()
    {
    	int a = 10;
    	int b = 20;
    	Swap_err1(a,b);
    }
    
    

    我们可以看到结果为:
    指针传值
    但是若将输出函数放在mian函数中时

    #include<stdio.h>
    
    void Swap_err1(int a,int b)
    {
    	int tmp;
    	tmp = a;
    	a = b;
    	b = tmp;
    	//printf("%d,%d\n",a,b);
    }
    
    int main()
    {
    	int a = 10;
    	int b = 20;
    	Swap_err1(a,b);
    	printf("%d,%d\n",a,b);
    	
    }
    

    结果就变成了:
    指针传值
    而这是因为:在一般传值调用的机制中只能把实参传送个形参,因此在函数调用调用,形参值发生改变,而实参中的值不会发生改变。

    这种情况我么就可以用指针来解决,因为指针传递的是一个变量的地址,而一个变量的地址若我们不去修改,那它是在被随机分配完毕之后是不会变化的。

  • 使用指针交换俩个变量的值,并在main函数中打印出来
  • #include<stdio.h>
    
    void Swap(int *p1,int *p2)
    {
    	int tmp;
    	tmp = *p1;
    	*p1 = *p2;
    	*p2 = tmp;
    }
    
    int main()
    {
    	int a = 10;
    	int b = 20;
    	Swap(&a,&b);
    	printf("%d,%d\n",a,b);
    	
    }
    

    结果如下:
    指针传值
    这是因为用指针将a和b的地址进行了交换,所以调用Swap函数可以将a和b的数值进行交换。

  • **我们得出结论:父函数调用子函数,子函数弱项修改父函数的值,就必须传变量的指针。**
  • 相关文章: