C++:声明指向类中数组的指针?

C++: declaring a pointer to an array within a class?

本文关键字:数组 指针 声明 C++      更新时间:2023-10-16

我对下面设置的这个问题的老师解决方案有点困惑。

我想当你声明一个指针变量然后设置为一个数组时,你会做这样的事情:

char *myPointer;

然后也许在构造函数中你做一些类似的事情

myPointer = new char[20];

为什么要将 char *symbol[20] 声明为类成员变量? 这到底是什么意思?如果它是一个静态数组,为什么不只声明字符符号[20];

问题和解决方案

假设股票类别具有符号 (char *(、成本 (int( 和股票 (int( 作为私有成员。 编写支持 股票s2("APPL",209,7(,s3("FB",80(;7股APPL209美元,5股FB80美元 <<提示:非常少...没有其他功能...>><<提示:让它更容易...假设符号最多可以包含 20 个字符...>>

class stock {
public:
stock(char * s, int c, int sh=5);
private:
char * symbol[20];
int cost;
int shares;
}

为上述声明编写实现函数


stock::stock(char *s, int c, int sh) {
strcpy(symbol, s);  // or other means of deep copy, no point if no deep copy
cost = c;
shares = s;
}

`````````````````````

你是完全正确的,没有必要symbol指向字符的指针数组。您正在传入一个字符串(如"APPL"(,它是一个数组字符,所以symbol应该是一个char数组,而不是一个char*数组。

char* symbol[20]的意思是一个由 20 个字符串组成的数组,其中数组中的每个指针都可能指向char数组的开头。

你真正应该使用的是std::string,但如果你的老师还没有涵盖这一点,那么char symbol[20]就可以了。

[char *symbol[20]] 到底是什么意思?

这意味着一个包含 20 个指向char的指针的数组。

为什么要将 [that] 声明为类成员变量?

通常:当一个类需要有 20 个可由索引访问的指针时,可以声明它。这就是数组的用途。

在具体问题的情况下:让一个由 20 个指针组成的数组来引用单个字符串是没有意义的。

如果是静态数组,

它不是"静态的"。它是一个(非静态(成员变量。

为什么不直接声明char symbol[20];

一般来说:因为字符数组与指针数组完全不同。如何用 20 个指针轻松解决可以用 20 个字符解决的问题并不明显。

在具体问题的情况下:这比指针数组更有意义。它确实有一个缺点,即大小限制为 20 个字符,因此在实践中没有用,但在练习范围内,它就足够了。对于实际用例,std::string会更好,因为它不限于任意长度。

简而言之:给定类中可能存在错误。