【发布时间】:2020-12-22 21:44:55
【问题描述】:
我有一个类将 object.name 定义为“Ben”,object.favNum 定义为 25。
我还有一个数组(名字)来存储这个类的 5 个对象。
在输出数组中对象的属性之前,我使用指针表示法将 names[0].name 的值更改为“Jim”,将 names[0].favNum 的值更改为 40。
这是我的代码:
#include<iostream>
class Person {
public:
std::string name = "Ben";
int favNum = 25;
};
int main()
{
Person names[5];
Person *ptr = &names[0];
// Changing Values
(ptr + 0)->name = "Jim";
(ptr + 0)->favNum = 40;
for (int i = 0; i < 5; i++)
{
std::cout << (std::string) (ptr + i)->name << std::endl;
std::cout << (int) (ptr + i)->favNum << std::endl << std::endl;
}
system("pause>0");
}
输出:
Jim
40
Ben
25
Ben
25
Ben
25
Ben
25
在我有“更改值”注释的地方,我想用一个函数替换这两行。 该函数将能够像我对 2 行所做的那样更改值。 这就是我遇到问题的地方。
我正在努力弄清楚将函数声明为什么类型、如何传递指针、如何接收指针以及如何更改函数中数组中对象的值。
【问题讨论】:
-
有什么理由在 C++ 代码中使用原始数组和原始指针?使用
std::array<Person,5>甚至std::vector<person>,您会变得更好、更轻松。 -
您不需要将事物转换为已有的类型。对代码进行强制转换是引入难以发现的错误的可靠方法。
-
另外,
(ptr + i)->name通常写成ptr[i].name。 -
@Ben 有很好的文档资料:en.cppreference.com/w/cpp/container “昨天开始使用数组和指针。” 如果您想了解如何使用,那绝对是您可以使用的最糟糕的起点用 C++ 编写代码。
-
这里可以避免指针。例如,只需使用
names[0] = {"Jim", 40};
标签: c++ arrays function class object