C++:声明指向类中数组的指针?
C++: declaring a pointer to an array within a class?
我对下面设置的这个问题的老师解决方案有点困惑。
我想当你声明一个指针变量然后设置为一个数组时,你会做这样的事情:
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
会更好,因为它不限于任意长度。
简而言之:给定类中可能存在错误。
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”