首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中按引用传递

在C++中按引用传递
EN

Stack Overflow用户
提问于 2010-02-09 21:52:34
回答 10查看 429.8K关注 0票数 230

如果C不支持通过引用传递变量,为什么可以这样做呢?

代码语言:javascript
复制
#include <stdio.h>

void f(int *j) {
  (*j)++;
}

int main() {
  int i = 20;
  int *p = &i;
  f(p);
  printf("i = %d\n", i);

  return 0;
}

输出:

代码语言:javascript
复制
$ gcc -std=c99 test.c
$ a.exe
i = 21 
EN

回答 10

Stack Overflow用户

发布于 2010-02-09 21:54:31

因为在上面的代码中没有按引用传递。使用指针(如void func(int* p))是按地址传递的。这在C++中是按引用传递的(在C中不起作用):

代码语言:javascript
复制
void func(int& ref) {ref = 4;}

...
int a;
func(a);
// a is 4 now
票数 52
EN

Stack Overflow用户

发布于 2010-02-09 21:54:30

您的示例之所以有效,是因为您将变量的地址传递给一个函数,该函数使用dereference operator操作变量的值。

虽然C语言不支持reference data types,但您仍然可以通过显式传递指针值来模拟按引用传递,如您的示例所示。

与继承自C的指针类型相比,C++引用数据类型的功能较弱,但被认为更安全。这将是您的示例,适用于使用C++ references

代码语言:javascript
复制
void f(int &j) {
  j++;
}

int main() {
  int i = 20;
  f(i);
  printf("i = %d\n", i);

  return 0;
}
票数 30
EN

Stack Overflow用户

发布于 2010-02-09 23:28:48

在C中没有通过引用传递,但是p“引用”到i,并且你通过值传递p。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2229498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档