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