我不明白指针变量在传递到函数时是如何工作的

I do not understand how a pointer variable works when passed into a function

本文关键字:何工作 工作 函数 指针 明白 变量      更新时间:2023-10-16

我不明白指针变量在传递到函数时是如何工作的。您能否简要介绍一下。另外,我不明白指针返回函数是如何工作的。我觉得如果我对两者都有更好的直觉,我就能在需要时应用它。

按值

因此,当您将变量传递给函数时,它会创建该变量的"副本">,该副本用于函数中,这意味着如果您修改副本,您将不会修改原始副本,而是修改该副本。

int x = 1;
std::cout << "Outside Before Function: " << x << std::endl;
function(x);
std::cout << "Outside After Function: " << x << std::endl;
void function(int x) {
x = 100;
std::cout << "Inside Function: " << x << std::endl;
}

将打印

Outside Before Function: 1
Inside Function: 100
Outside After Function: 1

通过参考

就像你传递一个指向函数的指针一样,你传递存在于函数外部的变量的内存地址,这允许你尊重该地址,并从内部修改存在于函数外部的变量,而不必通过返回参数来完成。这可以让您从函数中返回其他内容,例如它是否成功或失败。

int x = 1;
std::cout << "Outside Before Function: " << x << std::endl;
function(&x);
std::cout << "Outside After Function: " << x << std::endl;
void function(int * x) {
*x = 100;
std::cout << "Inside Function: " << *x << std::endl;
}

将打印

Outside Before Function: 1
Inside Function: 100
Outside After Function: 100

作为回报

传递指针返回对于内存分配包装器、单例实现以及太多要列出或我目前能想到的东西都很有用。

Malloc 包装器示例

void * mallocWrapper(size_t size) {
void * ret = malloc(size);
if (malloc == nullptr) {
exit(1);
}
return ret;
}