有关第四次实验报告
看似最简单但最需要理解的部分是实验1的交换,形参和实参虽然是最基础的概念,字面意义上不难理解,前者是后者在使用方法被调用时所使用的变量。但该实验中使用的函数一律为void类型,无返回值。几类交换方式会出现形参的值互相交换但没有传指给实参的情况。真正有效的方法是定义形参为两个实参的指针(a=&x,b=&y),目的是做到形参和实参在内存地址上的一一对应。此时调用a和b即为指针的值,在此基础上调用a和b便是该地址内x值和y值,最后有效的进行两数交换。
代码如下:
#include<stdio.h>
void swap1(int, int);
void swap2(int*, int);
void swap3(int*, int*);
void swap4(int*, int*);
int main()
{
int x = 2, y = 5, * a = &x, * b = &y;
printf("%p,%p\n", a, b);
printf("%d,%d\n\n", x, y);
x = 2, y = 5;
swap1(x, y);
printf("after1\n");
printf("%p,%p\n", a, b);
printf("%d,%d\n\n", x, y);
x = 2, y = 5;
swap2(&x, y);
printf("after2\n");
printf("%p,%p\n", a, b);
printf("%d,%d\n\n", x, y);
x = 2, y = 5;
swap3(&x, &y);
printf("after3\n");
printf("%p,%p\n", a, b);
printf("%i,%i\n\n", x, y);
x = 2, y = 5;
swap4(&x, &y);
printf("after4\n");
printf("%p,%p\n", a, b);
printf("%d,%d\n\n", x, y);
return 0;
}
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void swap2(int* a, int b)
{
int temp = *a;
*a = b;
b = temp;
}
void swap3(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void swap4(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}