我有一个数组。
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));
}
答案 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::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];
答案 2 :(得分:0)
正确的语法是:
char (*t)[LENGTH] = new char(*)[LENGTH];
但是用 new 分配它没有多大意义,因为它只分配一个指针,而不是一个数组。