为什么c++中的函数需要指针才能工作(按值传递,按引用传递)



我有一个关于c++的问题。我是一个新手,前几天用c++编码,更具体地说,我试图实现一些函数(1加2个数字,1交换2个数字(。

我意识到,实现加法函数的代码不需要指针(void func(,而交换函数只有在我在函数的参数和用于实现它的变量(int类型func(中使用指针后才能工作。

关于为什么会发生这种情况,有什么建议吗?它与通过值或引用传递有关吗?如果是,我们什么时候真正需要在这些函数中使用指针?

根据您的标题,函数不需要指针来工作:

int add(int a, int b)  
{
return a + b;
}

在C++中,传递参数的规则是传递变量的副本,除非另有说明。通过副本传递(也称为通过值传递(时,不能修改参数。

C++允许您传递对对象的引用,而不是传递大型数据结构的副本(任何不适合处理器寄存器的内容(。引用的大小通常比它引用的对象小得多。此外,通过引用可以修改原始对象:

bool divide(int a, int b, float& result)
{
if (b == 0) return false;
result = static_cast<double>(a) / static_cast<double>(b);
return true;
}

通过指针传递类似于通过引用传递。但是,指针可以指向任何位置。

函数接受参数,因为它们不能直接访问变量。当您只将值传递给函数(即void func(int a, int b){ ... }(时,该函数仍然无法访问您的变量。你所做的基本上是在函数中创建与你传入的值相同的新变量。
不过,当你传递指针时,你告诉函数实际变量在内存中的位置,因此,即使变量不在其范围内,它也可以对其进行修改(这很容易出错,这也是高级语言没有用户级指针的原因(。

最新更新