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);
}
我有一个家庭作业任务,我应该创建一个数组并仅使用指针实现冒泡排序算法。我创建了数组,但是如果我想输入 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);
}