gpt4 book ai didi

C++通过指针传递和修改值

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:13 25 4
gpt4 key购买 nike

直到我相信那个方法,比如

bool solverMethod::buildSimplex(double** simplex_ , double* funcEvals_, double* initPt_)
{
// things
}

会在调用它的方法中更改 simplex、funcEvals_、initPt_ 的值(通过指针传递)。我错了吗?那怎么放呢?

感谢并问候并为简单的问题道歉。

最佳答案

这可能不是一个答案,因为它是对指针、引用和引用语义的一般解释。

如果函数可以更改传递给它的参数对象,则称该函数具有引用语义。例如,如果交换值,以下 swap 函数具有引用语义:

int x = 4;
int y = 8;

swap(x, y);

assert(x == 8 && y == 4);

问题是您如何实现引用语义。 C++ 有一个 native 引用类型,使这非常自然:

void swap(int & a, int & b) { int t = a; a = b; b = t; }

相比之下,C 没有这样的 native 功能,C 中的每个 对象都是按值传递的。但是,C 具有可用于实现 引用语义的不同特性,即指针:对于每个类型T,都有一个相关类型T*,取一个T类型对象的address-of可以得到一个值:int x; int * p = &x;。现在您可以按值传递这些指针对象并使用它们来访问它们指向的原始对象。请注意,我们正在按值传递指针!

void c_swap(int * p, int * q) { int t = *p; *p = *q; *q = t; }

我们必须以不同的方式调用函数:swap(&x, &y)。因此,在 C 中,您始终可以判断参数是否正在被修改,因为唯一的方法是将其地址 传递给函数。在 C++ 中,您必须知道实际的函数签名才能知道是引用语义还是值语义。

关于C++通过指针传递和修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com