gpt4 book ai didi

c++ - 引用和指针都存储地址?

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:53 25 4
gpt4 key购买 nike

int* var&var 是否都存储地址,唯一的区别是你必须尊重 int* 才能取回值但是引用资料不是已经这样做了吗?难以彻底理解这些。

为什么当你有一个接受 int* 参数的函数时,你可以通过 & 传递值

最佳答案

它们是表达可能最终归结为同一事物的不同方式。它们都是由语言设计者发明的构造,这意味着您的编译器作者必须以他们认为适合底层机器的任何方式实现它们。

但是,仅仅因为它们在机器上可能代表相同的东西并不意味着它们是等价的。指针允许指向无的概念(NULL 指针),还允许执行数学运算以获得从起始位置索引的一部分内存......像这样:

int *x = new int [10];
*(x+2) = 5; //set the 3rd element of the array pointed to by 'x' to 5

非常明智。

引用没有这些事情的概念,即一个人可以做

int *x = new int[10];
*(x+2) = 5;
int &y = *(x+2);

但不是

int *x = new int[10];
*(x+2) = 5;
int &y = *(x+2);
y = y + 5;//this just changes the value of x[2]

这意味着由于错误的指针数学而更难注销结构的末尾,因此如果它们已被初始化为有意义的东西(即不从声明它们的函数返回),则它们会更安全堆栈或到不存在的数组元素)

int &dontdoit() {
//don't do this!
int x = 7;
int &y = x;
return y;
}

我认为这是完全合法和安全的,因为您不会破坏内存,但不推荐这样做,因为您正在混合习语并且您无法释放由此产生的分配内存:

int &dontdothiseither() {
int *x = new int;
int &y = *x;
return y;
}

此外,您可以根据需要多次设置指针,但不能设置引用。

int x[2];
int *y = x;//works
y = y+1; //works, now points to x[1];
int &z = x[0]; //works
z = x[1];//nope! This just sets x[0] to be the value in x[1]

关于c++ - 引用和指针都存储地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018174/

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