我最近尝试真正掌握 C++ 中的引用和指针,但我有点困惑。我理解*
and&
运算符可以分别获取地址中的值并获取值的地址,但是为什么不能将它们简单地用于像int
s 这样的基本类型?
我不明白为什么你不能,例如,做如下的事情,而不是使用任何奇怪的指针变量创建:
string x = "Hello";
int y = &x; //Set 'y' to the memory address of 'x'
cout << *y; //Output the value at the address 'y' (which is the memory address of 'x')
理论上,我认为上面的代码应该输出“x”的值。'y' 包含'x' 的内存地址,因此'*y' 应该是'x'。如果这可行(顺便说一下,在尝试编译它时,它不会——它告诉我它不能从字符串转换为 int,这没有多大意义,因为你认为内存地址可能是存储在一个 int 罚款)。
为什么我们需要使用特殊的指针变量声明(例如string *y = &x
)?在这里面,如果我们*
在上面的示例中按字面意思在指针声明中使用运算符,我们将'y'的值设置为'x'的内存地址,但是稍后当我们想要访问该值时在内存地址 ('&x'),我们可以使用我们之前设置为内存地址的相同的 '*y'。