Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何声明指向另一个数组元素的指针数组_C++_Arrays_Pointers - Fatal编程技术网

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

C++ 如何声明指向另一个数组元素的指针数组,c++,arrays,pointers,C++,Arrays,Pointers,我有一个数组 char选项卡[200] 然后我想创建一个数组,它由指向前面数组元素的指针组成 char** t = new (char*)[LENGTH]; 但我确实明白 C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id| 我应该如何动态声明它 编辑:指向选项卡数组的相应元素正确吗 char** t = new char*[dlugoscTab];

我有一个数组

char选项卡[200]

然后我想创建一个数组,它由指向前面数组元素的指针组成

char** t = new (char*)[LENGTH];
但我确实明白

C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id|
我应该如何动态声明它

编辑
:指向
选项卡
数组的相应元素正确吗

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

for(int i = 0; i < dlugoscTab; i++){
   *(t + i*sizeof(char)) = (tab + i*sizeof(char));
}
char**t=new char*[dlugoscTab];
对于(int i=0;i
应该是:

char** t = new char*[LENGTH];
如果希望
t
中的每个
i
th元素指向
tab
中的
i
th元素,可以这样做:

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

char** t = new char*[LENGTH];
如果希望
t
中的每个
i
th元素指向
tab
中的
i
th元素,可以这样做:

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

for(int i=0;i要按您尝试的方式执行,您只需去掉括号:

char** t = new char*[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 = new char*[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分配它没有多大意义,因为它只分配一个指针,而不是一个数组。

正确的语法是:

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

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

为什么用括号?你读了错误消息了吗?
std::vector t(LENGTH,nullptr);
为什么用括号?你读了错误消息了吗?
std::vector t(LENGTH,nullptr)
谢谢!我的编辑怎么样?正确吗?我想指向另一个数组的元素。@RobertKilar我编辑了我的答案-不正确。去掉
sizeof(char)
。谢谢!我的编辑怎么样?正确吗?我想指出另一个数组的元素。@RobertKilar我编辑了我的答案-不正确。去掉
sizeof(char)
@RobertKilar你不需要添加
sizeof(char)
,指针运算会自动影响类型的大小。此外,您所做的事情比需要的要复杂得多。只需使用
t[i]=&tab[i]
。这样就清楚了您的意思。@RobertKilar您不需要添加
sizeof(char)
,指针运算会自动影响类型的大小。此外,您所做的事情比需要的复杂得多。只需使用
t[i]=&tab[i]
。这样就清楚了您的意思。@JSQuareD This声明并动态分配指向长度字符数组的指针,这不是OP想要的。@JSQuareD This声明并动态分配指向长度字符数组的指针,这不是OP想要的。