这基本上只是为了帮助我更好地理解指针,所以如果你们能确认/否认/解释任何看起来我没有正确理解的东西,我将不胜感激。使用邮箱、阿姨、街道以及所有这些废话的例子简直令人困惑。
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
,但 &a
是 int
的地址,因此初始化行不通。
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
分配给指针指向 at 的 int
以更改调用函数中的值。
关于C++ 指针和引用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190727/