Joe*_* C. 4 c++ arrays pointers segmentation-fault
我有一个功课问题,我正在努力.我和其他一些学生都很确定我们的老师是错误的,但也许不是.我已经在这里检查了一些问题,并且无法真正找到一种方法来使用指针来创建本质上是一个数组.说明如下.
代码是这样的
int main()
{
int salary[20];
int i;
for (i = 0; i < 20; i++)
{
cout << "Enter Salary: ";
cin >> salary[i];
}
for (i = 0; i < 20; ++i)
salary[i] = salary[i] + salary[i] / (i + 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案是:
int main()
{
int* salary_pointer = new int;
for (int i = 0; i < 20; i++)
{
cout << "Enter Salary: ";
cin >> *(salary_pointer + i);
}
for (int i = 0; i < 20; ++i)
{
*(salary_pointer + i) = *(salary_pointer + i) + *(salary_pointer + i) / (i + 1);
cout << *(salary_pointer + i) << endl;
}
delete salary_pointer;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它不断标记13号工资的分段错误
我的主要目的(因为我几乎是积极的,我的老师写错了)是要更多地了解指针,所以学习这些令人困惑的东西的任何和所有提示和技巧将不胜感激.谢谢你们!
使用
int* salary_pointer = new int[20];
Run Code Online (Sandbox Code Playgroud)
相反,当你分配20 int秒时,不只是一个.然后,使用删除动态数组
delete[] salary_pointer;
Run Code Online (Sandbox Code Playgroud)
而不是delete salary_pointer.这里要小心:
salary[i] / (i + 1);
Run Code Online (Sandbox Code Playgroud)
如果操作数是int,那么你最终会截断.使用salary[i]/(i + 1.)的情况下,你希望你的结果作为一个double(在这种情况下,你最好使salary的数组doubleS或指针double,这样你就没有这个问题了).