为什么我不应该使用标准循环来访问动态数组?
Why should I not use a standard loop to access a dynamic array?
我刚开始学习C++。我正在查看访问数组的一个示例,示例如下:
a[i][j];
*(&a[0] [0]+2*i+j); /* Base address */
*(*(a+i)+j);
我对这个例子有点困惑。为什么我不能像下面这样创建一个标准循环:
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
// Do something
}
}
在访问任何一维数组时,我看到 2 个标准选项:
其中一个是您的答案中包含的那个:
a[i]
第二个:
*(a + i)
但是,当涉及到 two-dimensional 数组时,我只会使用方括号:
a[i][j]
为什么?因为使用指针表达式的上述表达式的等价物如下所示:
*(*(a + i) + j)
差不多self-explanatory我想。
您还询问了有关访问数组元素的问题。所以我真的不知道循环部分是关于什么的^^
您的示例列出了 3 种不同的方法来访问 multi-dimensional 数组中(大概)相同索引处的对象。这是您将在循环内执行的操作。所以要么做:
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = a[col][row];
}
}
或
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = *(*(a+col)+row);
}
}
或
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = *(&a[0] [0]+2*col+row);
}
}
我刚开始学习C++。我正在查看访问数组的一个示例,示例如下:
a[i][j];
*(&a[0] [0]+2*i+j); /* Base address */
*(*(a+i)+j);
我对这个例子有点困惑。为什么我不能像下面这样创建一个标准循环:
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
// Do something
}
}
在访问任何一维数组时,我看到 2 个标准选项:
其中一个是您的答案中包含的那个:
a[i]
第二个:
*(a + i)
但是,当涉及到 two-dimensional 数组时,我只会使用方括号:
a[i][j]
为什么?因为使用指针表达式的上述表达式的等价物如下所示:
*(*(a + i) + j)
差不多self-explanatory我想。
您还询问了有关访问数组元素的问题。所以我真的不知道循环部分是关于什么的^^
您的示例列出了 3 种不同的方法来访问 multi-dimensional 数组中(大概)相同索引处的对象。这是您将在循环内执行的操作。所以要么做:
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = a[col][row];
}
}
或
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = *(*(a+col)+row);
}
}
或
for(int row=0; row<i; row++ ){
for(int col=0; col<j; col++ ){
auto field = *(&a[0] [0]+2*col+row);
}
}