我不明白指针变量在传递到函数时是如何工作的
I do not understand how a pointer variable works when passed into a function
我不明白指针变量在传递到函数时是如何工作的。您能否简要介绍一下。另外,我不明白指针返回函数是如何工作的。我觉得如果我对两者都有更好的直觉,我就能在需要时应用它。
按值
因此,当您将变量传递给函数时,它会创建该变量的"副本">,该副本用于函数中,这意味着如果您修改副本,您将不会修改原始副本,而是修改该副本。
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;
}
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?