c++ 2维静态数组兼容2维动态指针
c++ 2 dimensional static array compatible with 2 dimensional dynamic pointer
是否有一种方法可以声明与动态指针(TYPE**)兼容的2维静态数组?
char strs1[2][256] = { "String 1", "String 2" }; // Static
我想把它赋值给
char **strs2 = strs1;
嗯,我可以这样做:
std::array<std::array<char, 256>, 2> arr = {"String 1", "String 2"};
char *temp[2] = { (char*)&arr[0], (char*) &arr[1] };
char **strs = (char**)temp;
cout << strs[0] << endl;
cout << strs[1] << endl;
// Output
String 1
String 2
但是有没有更好更简单的方法来达到同样的结果呢?
char**永远不能引用数组的数组(C/c++中没有二维数组),因为它没有内部数组大小的信息。特别是,编译器无法在以下代码段中生成正确的访问代码:
char** arr = initialize_by_hack();
arr[2][4] = '42';
在这里,要计算第二个偏移量(4),编译器需要知道元素数组的大小-但它在代码中无处可寻,并且不可用。
不,您无法改变二维数组与T**
不兼容的事实。
您只能执行像您在问题中假设的那样的hack变通方法,或者纠正最初导致您产生需求的错误或设计缺陷。
既然你在写c++:为什么不使用适当的,现代的,类型安全的技术,而不是本地数组和一堆指针?一个简单的Matrix<T,W,H>
类模板,包装一个静态分配的T[W*H]
,但暴露二维索引将是很好的。然后通过引用(或者,如果你真的需要,通过指针)传递它。
相关文章:
- 二维动态数组逻辑
- 在C++中通过引用传递字符串的二维动态数组
- 创建二维动态数组的函数
- 将一维动态阵列反转为n维
- 如何传递多维动态数组以在 c++ 中运行
- 如何初始化所有元素为 0 的指针的二维动态内存数组
- cpp二维动态数组
- 在C++中的类内部创建的二维动态分配数组
- 基类和派生类的二维动态数组
- 初始化所有条目为 0 的二维动态数组
- 多维动态数组,为什么不起作用?
- C++语法-多维动态数组
- 一个二维动态阵列的C++剖分与比较
- 如何将项目添加到二维动态矢量
- 二进制 I/O 到具有二维动态数组的文件
- 在 c++ 中初始化多维动态数组
- 二维动态容器 qt
- 如何在 C++ 中的类中声明二维动态数组
- 返回多维动态数组
- 转置二维动态矩阵