C++ 指针和引用说明

标签 c++ pointers

这基本上只是为了帮助我更好地理解指针,所以如果你们能确认/否认/解释任何看起来我没有正确理解的东西,我将不胜感激。使用邮箱、阿姨、街道以及所有这些废话的例子简直令人困惑。

int a = 5;

int b = &a; // b will be the memory address of 'a'

int *c = a; // c will be the value of 'a' which is 5

int *d = &a; // d will be a pointer to the memory address of 'a'

int &e = a; // what would this be?


void FunctionA()
{
     int a = 20;
     FunctionB(&a);
     // a is now 15?
}

void FunctionB(int *a)
{
     a = 15;
}

谢谢你们的帮助,我只是想在我阅读的所有糟糕的隐喻解释之外提高我的理解。

最佳答案

我会一件一件地处理:

int b = &a; // b will be the memory address of 'a'

没有。编译器(可能)不允许这样做。您已将 b 定义为 int,但 &aint 的地址,因此初始化行不通。

int *c = a;

不——同样的问题,但相反。您已将 c 定义为指向 int 的指针,但您正在尝试使用 int 的 对其进行初始化。

int *d = &a;

是的——您已将 d 定义为指向 int 的指针,并且您正在将 int 的地址分配给它——没问题。 int(或 int 数组)的地址是指向 int 的指针。

int &e = a;

这将 e 定义为对 int 的引用,并将其初始化为对 a 的引用。这是完全合法的,但可能不是很有用。仅供引用,引用最常见的用途是作为函数参数(当然还有其他用途)。

void FunctionA() { int a = 20; FunctionB(&a); }
void FunctionB(int *a) { a = 15; }

要完成这项工作,您需要更改 FunctionB 中的分配:

void FunctionB(int *a) { *a = 15; }

实际上,您试图将一个 int 分配给一个指针,但这是行不通的。您需要将 int 分配给指针指向 atint 以更改调用函数中的值。

关于C++ 指针和引用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190727/

相关文章:

c++ - 数组和指针 C++

c++ - 数据在内存中的顺序

c++ - 如何扩展这个 C++11 事件系统来处理多个参数?

c - C中的结构查找大于某个变量的元素

C++对指针的引用

c++ - 类似于指向成员函数的指针的静态函数定义

c++ - 将子对象复制构造为父类型指针

c# - 从窗口句柄获取真实文本

c++ - QProcess 卡住 GUI

c++ - Arch/Eclipse/C++/库放在哪里?