我正在研究一些遗留代码。我有以下数据类型:
typedef struct {
char *name ;
ColumnType type ;
unsigned pos ; //column position in table
CellData **data ; //ptr to list of cells in column
}Column ;
struct _table {
char name[TABLE_NAME_LEN+1] ;
unsigned int num_rows ;
unsigned int num_cols ;
Column **cols ; //ptr to list of columns
};
struct _table m_
在源代码中,有以下声明:
m_table.cols = new Column*[m_table.num_cols];
我熟悉new [],但我不确定乘法运算符在那里做什么 - 可以解释一下吗?
答案 0 :(得分:4)
这不是乘法。符号*
在C ++中有许多完全不同的含义,所有这些都取决于上下文。
在您的情况下,您正在创建Column*
的动态数组,即指向Column
的指针。
换句话说,您说new T[N];
,其中T = Column*
。
答案 1 :(得分:3)
它不是乘法运算符。而是分配一个Column*
数组(指向Column
类型的指针)。结果数组存储指针值
m_table.cols = new Column*[m_table.num_cols];
m_table.cols[0] = Column(); // Error: Expected Column* got Column
m_table.cols[0] = new Column(); // Ok
答案 2 :(得分:0)
在你的情况下,Column*
是一个类型(用于指向Column
类实例的指针)并且你创建了一个数组。
答案 3 :(得分:0)
它不是乘法运算符。它正在分配一个指向Column
的指针数组,而不是Column
的数组。
答案 4 :(得分:0)
它不是乘法运算符,它是指针规范,即“指向列的指针”。
答案 5 :(得分:0)
*
表示指针。所以你要创建一个Column
指针数组。