C语言| 拷贝传递(指针控制内存单元)
【程序代码1】
这个程序执行后不能交换i和j的值。
因为实参和形参之间的传递是单向的,只能由实参向形参传递。
被调函数调用完之后,系统为其分配的内存单元都会被释放。
所以虽然将i和j的值传给了a和b,交换的只是a和b内存单元的数据,对i和j没有任何影响。
【拷贝传递】将内存A中的值拷贝到内存B中。
拷贝传递的结果是:
不管如何改变内存B中的值,对内存A中的值都没有任何影响,因为它们两个是不同的内存空间。
【程序代码2】指针控制内存单元
此时实参向形参传递的是变量i和j的地址。
被调函数调用完,释放p和q的内存单元,
而p和q存放的是i和j的地址,可以进行拷贝传递。
[形参] 变量名为p和q,变量类型为int *型。
[实参] i和j;&i传递给p, &j传递给q。
#include <stdio.h>
void JH(int *p, int *q); //函数声明
int main(void)
{
int i = 22, j = 33;
printf("i = %d, j = %d\n", i, j);
JH(&i, &j);
printf("调用函数之后 i = %d, j = %d\n", i, j);
return 0;
}
void JH(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
return;
}