希赛考试网
首页 > 软考 > 软件设计师

实参是地址形参是什么

希赛网 2024-01-14 08:15:56

在计算机编程中,函数是一组可重用的代码,它将一组输入(称为参数)映射到一组输出(称为返回值)。实参(actual parameter)和形参(formal parameter)是函数参数的两种术语。实参是一个函数调用中传递给函数的参数值,而形参是一个函数定义中声明的参数变量。

地址是一个内存单元的唯一标识符。通常地址表示为十六进制数,它用于引用电脑内存中存储的值。地址形参是一种可以传递变量地址的方式,它是一种特殊类型的形参。在函数调用中,地址形参将指向原始变量的地址,这使得在函数内部修改原始变量成为可能。

接下来,我们将从不同的角度来分析实参是地址形参是什么。

从传递方式来看

在函数调用时,实参可以按值传递或按引用传递。按值传递是指将实参的值复制到形参变量中,形参变量与实参无关。按引用传递是指将实参地址传递给函数,这样函数可以直接操作实参。

以C语言为例,考虑下面这个函数:

```

void swap(int x, int y){

int temp;

temp = x;

x = y;

y = temp;

}

int main() {

int a = 10;

int b = 20;

swap(a, b);

printf("a=%d, b=%d", a, b);

return 0;

}

```

输出结果是 a=10, b=20。这是因为在 swap 函数中,x 和 y 只是函数的形参,它们的值被本地复制,交换仅限于函数内部。所以,即使在 swap 函数中,x 和 y 的值已经发生了交换,但在 main 函数中,a 和 b 的值并没有发生改变。

然而,如果将 swap 函数修改为这个样子:

```

void swap(int* x, int* y){

int temp;

temp = *x;

*x = *y;

*y = temp;

}

int main() {

int a = 10;

int b = 20;

swap(&a, &b);

printf("a=%d, b=%d", a, b);

return 0;

}

```

输出结果是 a=20, b=10。这是因为在 swap 函数中,x 和 y 是地址形参,它们指向实参 a 和 b 的地址。所以,通过交换地址形参指向的地址的值来实现了交换。

从效率来看

在函数调用中,按值传递需要将实参的值复制到形参变量中,这可能会导致内存资源的浪费。特别是当传递的参数很大时,复制消耗的时间和空间会相对较高。

而按引用传递仅传递地址,因此它比按值传递更高效。虽然传递的是指针,但指针占用的内存空间很小,它只是一个地址。

从安全性来看

使用地址参数可以提高程序的安全性。使用正常的实参传递,程序可能会因试图修改实参的副本而出现问题。当使用地址参数时,无论何时我们都可以保持对实参的引用,无论何时我们都不会创建实参的副本。

此外,在函数调用中,使用地址形参可以避免数组溢出、缓冲区溢出等安全隐患。通过传递数组的指针,函数可以利用数组中的数据,而无需复制它们,这可以避免在数组副本中尝试修改数据,而函数也可以在没有越界错误的情况下访问数组元素。

综上所述,实参是地址形参是一种可以提高程序效率和安全性的方式,尤其是当需要传递大型结构或数组作为参数时,通过使用地址形参,可以避免复制数据,减少内存开销,提高程序性能。使用地址形参还可以更方便地操作函数外的变量,因为它们的地址可以直接传递到函数中进行操作。

扫码领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件