繁体   English   中英

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

[英]How to declare array of pointers to the another array elements

我有一个数组。

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));
}
char** t = new (char*)[LENGTH];

应该:

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

如果您希望t每个第i个元素都指向tabi个元素,则可以这样简单地进行操作:

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

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

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

正确的语法是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM