#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iomanip>
#include<iostream>
using namespace std;
void change1(int x, int y);
void change2(int* x, int* y);
int main()
{
int a = 1, b = 2;
change1(a, b);
cout << a << " " << b<<endl;
change2(&a, &b);
cout << a << " " << b;
}
void change1(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
void change2(int* x, int* y)
{
int temp;
temp = *y;
*y = *x;
*x = temp;
}
用change1函数进行交换,结果是1和2,看起来没有交换
用change2函数进行交换,结果是2和1,交换成功
change1函数
change1函数写的没有问题
实参a,b的值赋给形参x,y后,x,y在内部确实进行处理了(交换)了,但是x,y的值并没有返回给a,b,所以函数功能完成后,外部的a,b没有完成交换。(void类型无返回值)
形参和实参虽然可以同名,但它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。
形式参数也是局部变量,
1.通过指针交换内存中的值
change2函数使用了指针
函数的形参设为指针,然后将指针上对应的数值进行交换,地址上的值就会改变。由于传递的是两个变量的内存地址(指针)使得我们可以直接操作对应的值。
change2(&a,&b);
void change2(int* x, int* y)
{
int temp;
temp = *y;
*y = *x;
*x = temp;
}
通过操作a,b内存中的值实现两个数的交换,内存中的值交换后,不管x,y是否返回值给a,b,a,b的值都是已经交换了的