1

我有一个数组。

char tab[200];

然后我想创建包含指向先前数组元素的指针的数组

char** t = new (char*)[LENGTH];

但我确实得到

C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id|

我应该如何动态声明

EDIT: 指向tab数组的相应元素是否正确?

char** t = new char*[dlugoscTab];

for(int i = 0; i < dlugoscTab; i++){
   *(t + i*sizeof(char)) = (tab + i*sizeof(char));
}
4

3 回答 3

2
char** t = new (char*)[LENGTH];

应该:

char** t = new char*[LENGTH];

如果您希望 in 中的每个i元素t都指向in 中的i第 th 元素tab,您可以简单地这样做:

for(int i=0; i<LENGTH; i++ )
    t[i] = & tab[i];
于 2013-03-16T16:27:14.853 回答
2

要按照您尝试的方式进行操作,您只需去掉括号:

char** t = new char*[LENGTH];
for (i = 0; i < LENGTH; i++) {
  t[0] = &tab[i];
}

但是,似乎没有太多理由在这里使用动态分配,所以只需使用一个数组char*

char* t[LENGTH];
for (i = 0; i < LENGTH; i++) {
  t[0] = &tab[i];
}

或者更好的是,使用标准容器,如std::arrayor std::vector

您编辑中的分配不正确:

*(t + i*sizeof(char)) = (tab + i*sizeof(char));

在这种情况下它起作用,但只是因为sizeof(char)是 1。你不应该sizeof在这里参与。向指针添加 1 不会将其移动 1 个字节,而是将其移动到指向它所指向的类型的下一个对象。你应该这样做:

*(t + i) = (tab + i);

但正如我在上面的示例中所写,这确实更容易理解:

t[i] = &tab[i];
于 2013-03-16T16:27:46.193 回答
0

正确的语法是:

char (*t)[LENGTH] = new char(*)[LENGTH];

但是用new分配它没有多大意义,因为它只分配一个指针,而不是一个数组。

于 2013-03-16T16:28:34.837 回答