如何声明指向另一个数组元素的指针数组

时间:2013-03-16 16:21:33

标签: c++ arrays pointers

我有一个数组。

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

3 个答案:

答案 0 :(得分:2)

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

应该是:

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

如果您希望i中的每个t元素指向i中的tab元素,您可以这样做:

for(int i=0; i<LENGTH; i++ )
    t[i] = & tab[i];

答案 1 :(得分: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::arraystd::vector

编辑中的作业不正确:

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

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

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

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

t[i] = &tab[i];

答案 2 :(得分:0)

正确的语法是:

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

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