对 C++ 中的指针引用感到困惑
Confused with references on pointers in C++
任务是在没有计算机的情况下计算以下源代码的输出,我会说是"123 234 678 678"
,因为ref1
是对ptr
值的引用和在 val2
的地址被分配给这个指针的那一刻, ref1
不应该也引用它的值吗?
int main() {
int* ptr = nullptr;
int val1 = 123, val2 {234};
ptr = &val1;
int& ref1 = *ptr;
int& ref2 = val2;
std::cout << ref1 << " ";
std::cout << ref2 << " ";
*ptr = 456; //ref1 = 456
ptr = &val2; //*ptr = 234, why isn't ref1 as well equal to 234?
*ptr = 678; //*ptr = 678, why isn't ref1 as well equal to 678?
std::cout << ref1 << " ";
std::cout << ref2 << "\n";
return EXIT_SUCCESS;
//output: 123 234 456 678
}
在此声明之后
int& ref1 = *ptr;
int& ref2 = val2;
ref1
指的是val1
,ref2
指的是val2
。声明后引用不能更改为引用其他变量。
注意引用ref1
不引用指针ptr
。由于取消引用指向变量 val1
.
的指针,它引用变量 val1
所以这些陈述
std::cout << ref1 << " ";
std::cout << ref2 << " ";
会输出
121 234
在此声明中
*ptr = 456;
变量val1
的值通过指针ptr
更改为456
。
之后指针ptr
的值被改成存放变量val2
的地址
ptr = &val2;
并通过指针
将变量val2
的值改为678
*ptr = 678;
所以这些陈述
std::cout << ref1 << " ";
std::cout << ref2 << "\n";
现在会输出
456 678
也就是说,它们输出引用所指变量的值。
在这个程序中,同一个指针被用来改变两个不同对象的值,因为用对象的地址重新分配了指针。
任务是在没有计算机的情况下计算以下源代码的输出,我会说是"123 234 678 678"
,因为ref1
是对ptr
值的引用和在 val2
的地址被分配给这个指针的那一刻, ref1
不应该也引用它的值吗?
int main() {
int* ptr = nullptr;
int val1 = 123, val2 {234};
ptr = &val1;
int& ref1 = *ptr;
int& ref2 = val2;
std::cout << ref1 << " ";
std::cout << ref2 << " ";
*ptr = 456; //ref1 = 456
ptr = &val2; //*ptr = 234, why isn't ref1 as well equal to 234?
*ptr = 678; //*ptr = 678, why isn't ref1 as well equal to 678?
std::cout << ref1 << " ";
std::cout << ref2 << "\n";
return EXIT_SUCCESS;
//output: 123 234 456 678
}
在此声明之后
int& ref1 = *ptr;
int& ref2 = val2;
ref1
指的是val1
,ref2
指的是val2
。声明后引用不能更改为引用其他变量。
注意引用ref1
不引用指针ptr
。由于取消引用指向变量 val1
.
val1
所以这些陈述
std::cout << ref1 << " ";
std::cout << ref2 << " ";
会输出
121 234
在此声明中
*ptr = 456;
变量val1
的值通过指针ptr
更改为456
。
之后指针ptr
的值被改成存放变量val2
ptr = &val2;
并通过指针
将变量val2
的值改为678
*ptr = 678;
所以这些陈述
std::cout << ref1 << " ";
std::cout << ref2 << "\n";
现在会输出
456 678
也就是说,它们输出引用所指变量的值。
在这个程序中,同一个指针被用来改变两个不同对象的值,因为用对象的地址重新分配了指针。