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

C++ C++;:声明指向类中数组的指针?,c++,arrays,pointers,C++,Arrays,Pointers,我对下面这个问题的老师解决方案有点困惑 我认为,当您声明指针变量,然后设置为数组时,您可以执行以下操作: char *myPointer; 然后在构造器中,你可以做一些 myPointer = new char[20]; 为什么要将char*symbol[20]声明为类成员变量? 这到底是什么意思?如果它是一个静态数组,为什么不直接声明char符号[20] 问题与解决办法 假设一个股票类有符号(char*)、成本(int)和股票(int)作为私有成员。 编写支持的最小库存类声明 股票s2(

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

我认为,当您声明指针变量,然后设置为数组时,您可以执行以下操作:

char *myPointer;
然后在构造器中,你可以做一些

myPointer = new char[20];

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

问题与解决办法

假设一个股票类有符号(char*)、成本(int)和股票(int)作为私有成员。 编写支持的最小库存类声明 股票s2(“APPL”,209,7),s3(“FB”,80);//APPL 7股209美元,FB 5股80美元 > >

编写上述声明的实现函数


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]
就可以了。

你完全正确,没有必要让
symbol
成为一个指向字符的指针数组。您正在传入一个字符串(如“APPL”),它是一个数组字符,因此
symbol
应该是
char
的数组,而不是
char*
的数组

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

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

[
char*symbol[20]
]的确切含义是什么

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

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

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

在出现特定问题的情况下:使用20个指针的数组来引用单个字符串是毫无意义的

如果是静态数组

它不是“静态的”。它是一个(非静态)成员变量

为什么不直接声明字符符号[20]

一般来说:因为字符数组与指针数组完全不同。一个可以用20个指针解决的问题如何能用20个字符轻松解决,现在还不清楚

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

简而言之:在给定的类中可能有一个bug

[
char*symbol[20]
]的确切含义是什么

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

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

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

在出现特定问题的情况下:使用20个指针的数组来引用单个字符串是毫无意义的

如果是静态数组

它不是“静态的”。它是一个(非静态)成员变量

为什么不直接声明字符符号[20]

一般来说:因为字符数组与指针数组完全不同。一个可以用20个指针解决的问题如何能用20个字符轻松解决,现在还不清楚

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


简而言之:在给定的类中可能有一个bug。

不应该编译
char*symbol[20]
将是一个由二十个指针组成的数组。这不是您在本场景中想要的。它是一个
char*
数组,而不是
char
数组。然而,描述听起来似乎并不是老师真正想要的。不过,这不是一个要问我们的问题。你应该问你的老师,那不应该
char*symbol[20]
将是一个由二十个指针组成的数组。这不是您在本场景中想要的。它是一个
char*
数组,而不是
char
数组。然而,描述听起来似乎并不是老师真正想要的。不过,这不是一个要问我们的问题。你应该问问你的老师。从“编写支持
stock s2(“APPL”,209,7),s3(“FB”,80)
”的最小stock类声明”这句话来看,我认为他们只想在
stock
类中保留一个字符串,而不是二十个字符串。@0x499602D2很公平。根据“编写支持
stock s2(“APPL”,209,7),s3(“FB”,80)
”的最小股票类声明”这句话判断,“我认为他们只想在
stock
类中保留一个字符串,而不是二十个字符串。@0x499602D2很公平。”。据此编辑。

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;
}


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