gpt4 book ai didi

c++ - 为什么某些 C/C++ 函数使用指针作为参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:44 27 4
gpt4 key购买 nike

我来自 C#,我正在学习 C++(使用 this tutorial),所以我对内存的了解相对较少,但我在指针中看到的唯一用途是“节省空间”和遍历数组.那么为什么像scanf 函数这样的函数需要指针作为参数呢?例如:

printf("你叫什么名字?: ");接着:扫描(“%s”,&用户名)。将变量本身作为参数传递不是更有意义吗?我正在看的 C 书说使用变量本身会产生意想不到的结果,但我不明白为什么。谁能以 C++ 的方式启发我?我不再学习 C,因为我意识到我是多么热爱 OOP。

最佳答案

在 C++ 中有 3 种不同的方法将变量传递给函数,通过复制传递、通过引用传递和通过指针传递。

#include <iostream>

void passByCopy(int a)
{
a += 1;
}

void passByReference(int &a)
{
a += 1;
}

void passByPointer(int *a)
{
(*a) += 1; // De-reference then increment.
}

int main()
{
int a = 0;
// Passing by copy, creates a copy of the 'a' object, then sends it to the function.
passByCopy(a);
std::cout << a << std::endl; // Outputs 0

// Passing by reference, causes the 'a' object in the function to reference the 'a'
// object at this scope. The value of 'a' will change.
passByReference(a);
std::cout << a << std::endl; // Outputs 1

// Passing by pointer, does almost the same thing as a pass by reference, except a
// pointer value can by NULL, while a reference can't.
passByPointer(&a);

std::cout << a << std::endl; // Outputs 2
}

对于scanf,函数的目的是将值传递给当前范围内的变量,所以不能使用pass by copy。它不使用引用传递有两个原因,一个是它是一个旧的 C 函数,因此在编写时引用传递并不存在。第二个是它是一个可变参数函数,这意味着该函数在内部接收一个指针列表而不是一系列参数。

关于c++ - 为什么某些 C/C++ 函数使用指针作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054662/

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