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

标签 c++ arrays pointers

我有一个数组。

字符标签[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::arraystd::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/

相关文章:

c++ - 为什么我会收到 "void value not ignored as ought to be"错误?

c++ - 在 C 或 C++ 中取消引用数组时使用小数参数

c# - 比较出错 c# Dictionary<String, string[]>

c++ - 设计和可读性

python - 与 array[++i] 和 array[i++] 在 Python 中比较的代码?

arrays - 另一个数组中的数组

c - 检测链表中的多个循环

我可以安全地将 &char[] 转换为 char** 吗?

c++ - c在c++实践中

c++ - 如何限制从主函数访问类函数?