C++中的数组指针

Array Pointer in C++

本文关键字:指针 数组 C++      更新时间:2023-10-16
int n;
int *array[8]
cout<<"Enter Number Between 0-9 Only"<<endl;
for(int i = 0; i< 9; i++){
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;
    if((n >= 0) && (n <= 9))
        array[i] = &n;
    else {
        cout << "Numbers from 0-9 onlyn" << endl;
        i--;
    }
}
cout << *array[0] << endl;
}

我正在尝试在指针数组中存储 9 个输入的数字,但它不起作用为什么?你能向我解释为什么以及如何解决或改进它吗?我只是一个初学者,这不是家庭作业,我测试我读过的东西。

array[i] = &n;

将在数组中的每个条目中存储相同的地址。这只是指向n因此将始终指向该值。

将数组定义为整数数组

int array[9];

然后将值放入该数组中

array[i] = n;

从堆中分配一些内存

int *array[9];
...
array[i] = new int;
*array[i] = n;

但是,您必须使用delete释放此内存以避免内存泄漏。

这里有几个问题。

  1. 您无处存储值。你有一个由 8 个指针组成的数组,这些指针都设置为指向同一个变量 n,该变量位于堆栈上,因此超出了范围。
  2. 数组有 8 个元素,因此循环经过一个末尾
  3. 这是C++所以最好不要使用 C 数组,除非你有正当的理由。

我会有更像*NB未编译和运行的东西(

{
...
std::vector<int> array;
cout<<"Enter Number Between 0-9 Only"<<endl;
for(int i = 0; i< 8; i++){
    int n;
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;
    if((n >= 0) && (n <= 9))
        array.push_back(n);
    else {
        cout << "Numbers from 0-9 onlyn" << endl;
        i--;
    }
}
cout << array[0] << endl;
}

您正在数组中保存指向 n 的指针,但不断更改 n 的值。

你真的不需要在这里弄乱指针。更改数组定义、填充方式和显示方式,您应该会有更好的运气。

int array[9];
...
array[i] = n;
...
cout << array[0] << endl;