int &的意思是什么

您所在的位置:网站首页 index是什么意思译 int &的意思是什么

int &的意思是什么

2023-03-29 11:53| 来源: 网络整理| 查看: 265

这里要当心。您正在遍历C/C++行。有一个非常明确的区别,但它并不总是这样:

C++:这通常意味着引用。例如,考虑以下内容:

void func(int &x) { x = 4; } void callfunc() { int x = 7; func(x); }

因此,C++可以通过值传递,也可以通过引用传递。

但是,C没有这样的按引用传递功能。&表示"addressof“,是从变量中构造指针的一种方法。但是,请考虑以下内容:

void func(int* x) { *x = 4; } void callfunc() { int x = 7; func(&x); }

看似相似,但本质上不同。您在C中所做的是传递指针的copy。现在这些东西仍然指向相同的内存区域,所以就指向内存而言,其效果类似于按引用传递,但它不是传入的引用。它是对内存中某个点的引用。

试试这个(编译成C):

#include void addptr(int* x) { printf("Add-ptr scope 1:\n"); printf("Addr: %p\n", x); printf("Pointed-to-memory: %d\n", *x); *x = *x + 7; x++; printf("Add-ptr scope 2:\n"); printf("Addr: %p\n", x); printf("Pointed-to-memory: %d\n", *x); } int main(int argc, char** argv) { int a = 7; int *y = &a; printf("Main-Scope 2:\n"); printf("Addr: %p\n", y); printf("Pointed-to-memory: %d\n", *y); addptr(y); printf("Main-Scope 2:\n"); printf("Addr: %p\n", y); printf("Pointed-to-memory: %d\n", *y); return 0; }

如果C通过引用传递,那么传入的指针地址,当被addptr改变时,应该反映在main中,但它不是。指针仍然是值。

因此,C没有任何通过引用传递的机制。在C++中,这是存在的,这就是&在函数参数等中的含义。

编辑:你可能想知道为什么我不能用C++轻松地做这个演示。这是因为我无法更改引用的地址。完全没有。来自this quite good guide to references

如何重新放置引用以使其引用不同的对象?

不行。

你不能把引用从引用中分离出来。

与指针不同的是,一旦引用被绑定到一个对象,它就不能被“重新定位”到另一个对象。引用本身不是一个对象(它没有标识;获取引用的地址就是引用的地址;请记住:引用就是它的引用)。

在这个意义上,引用类似于常量指针,比如int* const p(与指向常量的指针相反,比如int const* p)。但是,请不要混淆引用和指针;从程序员的角度来看,它们是非常不同的。

通过请求,在返回引用时:

#include using namespace std; int& function(int f) { f=f+3; return f; } int main(int argc, char** argv) { int x = 7; int y; y = function(x); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3