我有一个数组。
字符标签[200];
然后我想创建包含指向前一个数组元素的指针的数组
char** t = new (char*)[LENGTH];
但我确实明白了
C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id|
我应该如何声明它动态?
编辑
:指向 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];
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];
关于c++ - 如何声明指向另一个数组元素的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451603/