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

时间:2018-02-22 05:10:58

标签: c++ arrays pointers 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;
}

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

“*”和“++”运算符都具有相同的优先级,但关联性是从右到左。您正在取消引用未在循环中使用的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;
}

答案 2 :(得分:0)

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

const letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];

function getNumbersAndLettersFromString(stringInput) {
    const chars = string.split('');

    chars.reduce((acc, curr) => {
        if (letters.includes(curr)) {
            return {
                ...acc,
                letters: [
                    ....acc.letters,
                    curr,
                ]
            };
        }

        if (numbers.includes(curr)) {
            return {
                ...acc,
                numbers: [
                    ....acc.numbers,
                    curr,
                ]
            };   
        }
    }, {letters: [], numbers: []})
}