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

1 c++ pointers

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

πάν*_*ῥεῖ 5

在什么样的情况下,我应该使用它的棘手形式?

从来没有,除非你参加@MM'评论中提到的代码混淆比赛

它会生成更快的二进制代码吗?

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

我是否还应该出于某种原因付出额外的努力并用指针实现它?

不.请使用标准容器或智能指针.不要使用原始的c风格数组和指针.

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

std::array<std::array<T,5>,10> array2D;
Run Code Online (Sandbox Code Playgroud)

对于可以使用的尺寸变化的2D阵列

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));
}
Run Code Online (Sandbox Code Playgroud)

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