天天看點

函數調用中形參實參關系的深度講解

通過函數調用實作兩個數交換會 有以下幾種情況:

情況一

#include<stdio.h>
int main()
{
    int a = ,b = ;
    void swap(int x, int y);
    swap(a,b);
    printf("a=%d,b=%d\n",a,b);
    return ;
}                
void swap(int x, int y)   //形參不能傳遞給實參,即形參對實參不構成影響 
{
    int tmp = x
    x = y;
    y = tmp;//是以當a,b傳過來的時候,形參當中x,y 進行了交換,而不能反傳給實參
            //是以此程式有誤; 
    x = y;
    y = tmp;
           

是以上述程式錯誤

情況二

#include<stdio.h>
int main()
{
    int a = ,b = ;
    void swap(int x, int y);
    swap(a,b);
    printf("a=%d,b=%d\n",a,b);
    return ;
}                , 
void swap(int *x, int *y)   
{
    int *tmp =* x;  //實作的是兩個指針指向的交換并不影響a,b的值 
    *x = *y;
    *y = tmp;
}
           

是以上述程式錯誤

情況三(正确)

#include<stdio.h>
int main()
{
    int a = ,b = ;
    void swap(int x, int y);
    swap(&a,&b);                 //a,b的位址傳遞給形參 
    printf("a=%d,b=%d\n",a,b);
    return ;
}                  
void swap(int *x, int *y)   
{
    int tmp = *x;  //tmp 中存放a的位址 
    *x = *y;      //x中存放b的位址 
    *y = tmp;     //y中存放a的位址        
}
           

總結:

  1. 形參是實參的一份臨時拷貝,形參和實參在開辟空間時,其開辟的空間是不同的
  2. 單項傳遞,即由實參傳遞給形參,形參無法傳遞實參
  3. 通過指針将形參和實參聯系起來