gpt4 book ai didi

c - 我要求澄清有关 C 中的 '' 未通过引用传递''

转载 作者:行者123 更新时间:2023-12-02 20:04:46 24 4
gpt4 key购买 nike

尝试编译 void some_function(int * & some_pointer); 并收到编译器错误:在“&”标记之前预期有“;”、“,”或“)”。 我意识到只有当函数的引用被删除时我才能编译 void some_function(int * some_pointer);

研究后我找到了解决方案:“在 C 中无法通过引用传递”。它不会编译该函数。

但是,它引起了人们的注意:scanf("%d", &my_var); 我们一直通过引用传递......运作如何?我假设我们无法创建要求引用的函数,因为我们可以使用引用作为参数。程序将按值传递它,然后更改原始变量。这是对的吗?

或者函数是否需要一个指针,当我们使用 & 时,它会创建一个指向该变量的指针?我很困惑。

最佳答案

Or is the function asking for a pointer and when we use & it creates a pointer to that variable?

完全正确。

在 C++ 中,符号 & 有多种含义:

  • 当在表达式中用作一元运算符时,它的意思是“获取...的地址”,并生成一个指针;
  • 当属于 int&(或者实际上 int*&)等类型的一部分时,表示“引用”;
  • (并且,当用作两个算术表达式之间的二元运算符时,它的意思是“按位AND”。)

通过选择使用 & 作为引用类型,我认为,这个想法是为了节省创建新符号的时间,并尝试在指针和引用之间创建一些对称性。我认为这不起作用;我觉得这真的很令人困惑。

但对你来说,在 C 语言中,这是没有意义的,因为(正如你所发现的!)C 没有引用。相反,您的函数可以编写为采用指针到指针 (int**)。讽刺的是,您可能需要在调用站点使用 & 来向此类函数呈现您的参数!

更复杂的是,您有时会听到广义上使用的短语“通过引用传递”。这在 C++ 领域是令人困惑的,因为“引用”在那里有更具体的含义。事实上,C++语言中引入引用专门是为了让“按引用传递”更加优雅和直观。但回到 C 语言,更一般地说,这只是“我们引用一个事物而不是复制它”的一种方式;从技术上讲,在 C 语言中,我们这样做的方式实际上是传递一个指针

关于c - 我要求澄清有关 C 中的 '' 未通过引用传递'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55055826/

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