gpt4 book ai didi

c++ - C++指针在for循环中被覆盖

转载 作者:行者123 更新时间:2023-12-02 09:55:56 25 4
gpt4 key购买 nike

有人可以解释为什么在循环中声明变量时指针会被覆盖吗?

例如,给定以下代码段,用户输入1和2。我希望pNums数组包含2个指向2个分别保持值1和2的整数的指针。

但是,控制台会打印出22

#include <iostream>
using namespace std;

//Input "1 2"
int main() {
int* pNums[2];
for(int i = 0; i < 2; i++){
int num;
cin >> num;
pNums[i] = (&num);
}
cout << (*pNums[0]) << endl;
cout << (*pNums[1]) << endl;
}

为什么会这样呢?我该如何解决呢?例如,如果我们不知道用户要输入多少个数字怎么办,而不是 for循环,我们有一个 while循环?在满足某些条件之前,我们要继续创建新的指针并将其存储到 pNums vector 中吗?

最佳答案

只有一个num,您正在覆盖它。 (然后导致未定义的行为,但是不要介意。)

有两种简单的方法可以避免此错误。

1)存储对象,而不是指针:

int nums[2];
for(int i = 0; i < 2; i++){
cin >> nums[i];
}

2)使用动态分配:
int* pNums[2];
for(int i = 0; i < 2; i++){
int *p=new int;
cin >> *p;
pNums[i] = p;
}

关于c++ - C++指针在for循环中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com