有关第四次实验报告

有关第四次实验报告

看似最简单但最需要理解的部分是实验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;
}

Guess you like

Origin blog.csdn.net/FriedReich/article/details/121816835