c++ - 为什么在 C++ 中使用 "*(*(array + i) + j)"而不是 "array[i][j]"?

标签 c++ pointers

在什么示例情况下我应该使用更棘手的形式?它会生成更快的二进制代码吗?如果我可以用 [][] 符号来完成这项工作,我是否还要出于某种原因付出额外的努力并用指针来实现它? 对于单个数据,我理解指针的需要。我特别要求二维数组,而不是关于使用指针的一般意义。

最佳答案

In what example situation I should use the trickier form of it?

从不,除非您正在参加 @M.M' comment 中提到的代码混淆竞赛

Does it generate a faster binary code?

不,发出的汇编指令应该与任何体面的编译器相同。

should I still make an extra effort for some reason and implement it with pointers?

没有。请改用标准容器或智能指针。避免使用原始的 C 风格数组和指针。

对于已知尺寸,最简单的方法是

std::array<std::array<T,5>,10> array2D;

对于大小不同的二维数组,您可以使用

size_t rows, columns;
std::cout << "Enter row and column size please > " << std::flush;
if(std::cin >> rows >> columns) {
    std::vector<std::vector<T>> array2D(rows,std::vector<T>(columns));
}

要优化 2D 数组以使用连续的动态内存块,请考虑编写一个小包装类,将行和列偏移量转换为内部值位置(例如,在简单的 std::vector 中维护).

关于c++ - 为什么在 C++ 中使用 "*(*(array + i) + j)"而不是 "array[i][j]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42036361/

相关文章:

c++ - 我得到的掩护问题为 "Wrapper object use after free (WRAPPER_ESCAPE)"

c++ - 在/proc/net/udp 中获取用于查找的 inode

c++ - 检查 std::vector 是否有重复项

c - 将成员地址分配给结构中的其他成员

c++ - 如何在编译或运行时检测对临时问题的 const 引用?

c++ - 为抽象类中的纯虚方法提供实现

C - 使用指针向上移动数组元素

c - 指针数组,停止运行

C比较两个大于如果一个为空的指针

python - golang 中数组的子集