形参和实参以及用指针实现对各类形参的修改

发布于:2023-10-25 ⋅ 阅读:(106) ⋅ 点赞:(0)

在编程中,形参(formal parameter)和实参(actual argument)是关于函数调用的两个重要概念:

形参(Formal Parameter):

形参是函数定义中声明的参数,它们用于指定函数接受的输入。
形参通常出现在函数的参数列表中,作为函数的参数定义,指定参数的名称和数据类型。
形参充当函数内部局部变量的角色,可以在函数内部使用,但它们的值通常是在函数调用时由实参传递进来的。
例如,在下面的函数定义中,x 和 y 是形参:

void add(int x, int y) {
    int result = x + y;
    // ...
}

实参(Actual Argument):

实参是在函数调用时传递给函数的值或表达式,它们用来提供函数所需的输入数据。
实参通常出现在函数调用表达式中,传递给函数的参数值应该与形参的类型和顺序相匹配。
例如,在下面的函数调用中,5 和 3 是实参:

int result = add(5, 3); // 5和3是实参

在函数调用时,实参的值会被传递给对应的形参,从而使函数能够使用这些值执行其操作。实参和形参之间的匹配通常基于它们的顺序和数据类型,这种匹配是必须的,以便正确传递数据到函数中。

实参提供了函数所需的具体数据,而形参充当接收这些数据的容器。函数的目的是使用形参执行特定的操作,以产生所需的结果。

当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该

函数运行结束的时候形参被释放,而实参内容不会改变。

当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。

例如:
1.

void func1(int* p)
{
	*p = 10;
}
int main()
{
	//要改变int,传int的地址
	int a = 0;
	func1(&a);
	printf("a=%d\n", a);
	return 0;
}

2.//这是个结构体

void func3(SLTNode* pnode)
{
	pnode->next = NULL;
}
//要改变结构体,传结构体的地址
int main()
{
	SLTNode node;
	func3(&node);
	
	return 0;
}

如图所示a的值被修改了
在这里插入图片描述
如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身

3.//指针

void func2(int** pp)
{
	*pp = malloc(sizeof(int)*10);
}
	//要改变int*,传int*的地址
int main()
{
	int* ptr = NULL;
	func2(&ptr);
	return 0;
}

4.//结构体指针

void func4(SLTNode** ppnode)
{
	*ppnode= NULL;
}
int main()
{
//要改变结构体指针,传结构体的指针的地址
	SLTNode* pnode;
	func4(&node);
	return 0;
}

简而言之就是
在这里插入图片描述
最重要的是:形参的改变不影响实参

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到