呼叫函式實現兩個數交換

horizonline發表於2018-04-14
兩個數的交換:
#include <stdio.h>
void   exchange(int one, int another);
void   exchange(int one, int another) {
 int tmp;

    printf("exchange():%p\n", &tmp);
 tmp = one;
 one = another;
 another = tmp;
 }

int main() {
 int num1;
 int num2;
    printf("請輸入兩個數:");
    scanf("%d%d", &num1, &num2);
    exchange(num1 ,num2);
    printf("交換結果:%d %d\n", num1, num2);
 
    return 0;
}
函式exchange()並不能實現主函式中num1和num2空間的值交換。原因:在主函式呼叫函式exchange()時,以棧“先進後出"的原則,先將並num1空間的值傳遞給one空間再將num2空間的值傳遞給two空間,再在exchange()函式中藉助區域性變數tmp,將one和two空間的值進行交換,此刻num1和num2空間的值未因此改變。呼叫完畢後,指標回落,tmp,two和one空間將會出棧,不在受到棧的束縛,而num1和num2空間並未發生變化。因此exchenge( )函式並不能將num1和num2中的值進行交換。

為了實現num1和num2空間值得交換。我們將採用地址傳遞的方法。程式碼如下:
#include<stdio.h>
void  realchange(int *, int *);

void  realchange(int *one, int *another)
{
int tmp;
tmp =*one;
*one = *anthoner;
*another = tmp;
}
int main()
{
int num1;
int num2;
scanf('%d %d', &num1,&num2);
realchange(&num1, &num2);
printf('交換後:%d %d', num1, num2);
return 0;
}
主函式在呼叫realchange()是將num1和num2空間的首地址分別傳遞給指標變數one和two的空間,即:*one=&num1(one指向num1)*two=&num2(two指向num2) 在realchange()中,將one所指向的空間(num1)的值賦給tmp空間,再將two所指向的空間(num2)的值賦給one所指向的空間,最後將tmp空間的值賦給two所指向的空間.最終達到交換num1和num2空間的值的目的。








相關文章