【发布时间】:2022-06-30 16:52:18
【问题描述】:
我很困惑为什么在不同的函数中使用相同的指针得到不同的值。
func_A 的输出显示了正确的值及其指针。
func_B 的输出显示不同的值,但指针相同。
如果在func_A 和func_B 之间什么都不做,相同的指针如何指向不同的值?
#include <iostream>
int *values;
void func_A() {
int vals[3];
for (int i = 0; i < 3; i++)
vals[i] = i;
// Store the values in the global variable
values = vals;
// Print pointer/values, Good values are printed
std::cout << values << ": " << *(values) << "\n";
std::cout << values + 1 << ": " << *(values + 1) << "\n";
std::cout << values + 2 << ": " << *(values + 2) << std::endl;
}
void func_B() {
// Print pointer/values, Same pointers but Different values
std::cout << values << ": " << *(values) << "\n";
std::cout << values + 1 << ": " << *(values + 1) << "\n";
std::cout << values + 2 << ": " << *(values + 2) << std::endl;
}
int main() {
func_A();
func_B();
return 0;
}
输出:
0x7ffe1de5b31c: 0
0x7ffe1de5b320: 1
0x7ffe1de5b324: 2
0x7ffe1de5b31c: 32766
0x7ffe1de5b320: 501592880
0x7ffe1de5b324: 32766
【问题讨论】:
-
func_A()返回后指针指向无效对象。在那之后任何事情都可能发生。