C++ 中的动态数组(用指针表示)- 输入元素?

Dynamic arrays (represented with pointers) in C++ - entering elements?

我有一个家庭作业任务,我应该创建一个数组并仅使用指针实现冒泡排序算法。我创建了数组,但是如果我想输入 3 个元素,即如果用户输入 n = 3,程序不允许我输入第三个数字。我想问一下为什么会这样?

提前致谢。

#include <iostream>
using namespace std;
int *n = new int ;
int main()
{
    cout<<"Vavedete broya na chislata:"<<' ';
    cin>>*n;
    int *arr = new int[*n];
    cout<<"Vavedete elementite:"<<endl;
    int *i=new int;
    for(*i=0; *i<*n; *i++)
    {
        cin>>*(arr+*i);

    }
    return 0;
}

后缀增量的优先级高于间接运算符的优先级,因此在循环中您需要编写 ++*i,而您当前在第二次迭代时的实现 *i 包含垃圾,因此您编写进入非预期位置。您可以检查优先级 table here.

此外,使用前缀递增也是有充分理由的,因为当您开始使用迭代器时,您将避免创建临时对象。

'*' 和 '++' 运算符具有相同的优先级,但关联性是正确的 left.You 正在取消引用循环中未使用的 i++。 尝试:

#include <iostream>
using namespace std;
int *n = new int ;
int main()
{
    cout<<"Vavedete broya na chislata:"<<' ';
    cin>>*n;
    int *arr = new int[*n];
    cout<<"Vavedete elementite:"<<endl;
    int *i=new int;
    for(*i=0; *i<*n; (*i)++)
    {
        cin>>*(arr+*i);

    }
    return 0;
}

在你的 for 循环中你应该放方括号 (*i)++ 因为当你写 *i++ 首先你增加 i 的地址然后得到它的值

 for (*i = 0; *i<*n; (*i)++)
    {
        cin >> *(arr + *i);

    }