[英]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
个元素都指向tab
第i
个元素,则可以这样简单地进行操作:
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::array
或std::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.