1. 程式人生 > >C語言函式傳遞中形參的變化不會改變實參的值

C語言函式傳遞中形參的變化不會改變實參的值

如題,C語言在函式間傳遞引數時,形參的變化是不會改變實參的值的!!!

如:

include<stdio.h>

void main(){

  void swap(int,int);

  int a,b;

  scanf("%d,%d",&a,&b);

  swap(a,b); 

}

void swap(int a,int b){

  int temp;

  temp = a;

  a = b;

  b = temp;

}

因為形參與實參的記憶體單元不同,所以,只是值傳遞,並不能直接進行值修改。

為此,有兩種方法可以解決這個問題:

一個是傳遞指標,另一個是用return返回值到該變數。

傳遞指標:

void main(){

  void swap(int *,int *);

  int a,b;

  scanf("%d,%d",&a,&b);

  swap(&a,&b);

}

void swap(int * a,int * b){

  int temp;

  temp = *a;

  *a = *b;

  *b = temp;

}

使用return返回值:

因為此處定義了兩個變數,C語言並不支援多值返回,所以可以返回指標,具體可以是返回結構體,或者是陣列。

返回結構體:

struct test{
 int a;
 int b;
};

void main(){
  struct test aa; 

  struct test swap(int,int);

  scanf("%d,%d",&aa.a,&aa.b);

  aa = swap(aa.a,aa.b);
  printf("%d,%d",aa.a,aa.b);

}

struct test swap(int a,int b){
  struct test aa;
  aa.a = b;
  aa.b = a;
  return(aa); 
}

返回陣列指標:

void main(){
 
  int a[2];
  int *p;

  int * swap(int,int);

  scanf("%d,%d",&a[0],&a[1]);

  p = swap(a[0],a[1]);
  a[0] = p[0];
  a[1] = p[1];
 
  printf("%d,%d",a[0],a[1]);

}

int * swap(int a,int b){
 
  int c[2];
  c[0] = b;
  c[1] = a;
  return(c); 
}