C++ 不使用数组表示法分配2D数组
正在处理一个赋值,该赋值要求创建和遍历二维整数数组,但没有使用数组表示法,例如[1][2]或偶数((a+i)+j)。需要使用指针算法来访问每个单独的元素 到目前为止,我的方法是这样分配。包含的注释显示了我认为我的代码应该实现的功能,请随意更正C++ 不使用数组表示法分配2D数组,c++,arrays,pointers,2d,C++,Arrays,Pointers,2d,正在处理一个赋值,该赋值要求创建和遍历二维整数数组,但没有使用数组表示法,例如[1][2]或偶数((a+i)+j)。需要使用指针算法来访问每个单独的元素 到目前为止,我的方法是这样分配。包含的注释显示了我认为我的代码应该实现的功能,请随意更正 int **a; // 2d array, or pointer to array of pointers row = 5; count = 5; // allocate space a = new int* [row]; // crea
int **a; // 2d array, or pointer to array of pointers
row = 5;
count = 5;
// allocate space
a = new int* [row]; // create array of pointers
int *p = *m; // point to first array
for (int r = 0; r < row; r++)
{
a = new int [col]; // create space within each array
a++;
}
访问与相同的对象(第一个元素)
为什么不声明一个简单的数组呢。二维阵列可以展平为一维阵列。这将大大简化算法
int* a = new int[row * column];
for (int iRow = 0; iRow < (row - 1); ++iRow)
for (int jCol = 0; jCol < (column - 1) ; ++jCol)
{
// here you can access a[iRow * row + jCol]
}
int*a=新的int[行*列];
对于(int-iRow=0;iRow<(第1行);++iRow)
对于(intjcol=0;jCol<(列-1);++jCol)
{
//在这里您可以访问[iRow*行+jCol]
}
您必须在每列之间重置pElement
,此时,它将在第一列限制后继续执行多达20个步骤
然后,您必须更加小心地使用&
运算符。它接受变量的地址。[0]操作获取数组中的第一个值,这两个值表示:&pRow[0]==pRow=>true
既然不应该使用数组表示法,pRow
就足够了
这在语义上也是正确的,但是,正如我上面所说的,不需要&var[0]
,它的计算结果无论如何都是var
另外,作为旁注,这样说对吗
int *pRow = *a;
int *pElement = &pRow[0];
int *pRow = *a;
int *pElement = &pRow[0];
访问与相同的对象(第一个元素)
我把“作业”理解为“家庭作业”,所以重新标记。如果我错了,请纠正我。数组相关。@badgerr是的,您是正确的,无需修改@弗雷迪:你写的FAQ真棒!非常有用。啊,是的,1d会更好,但我将其声明为2d数组,或者更确切地说是int**a,这是要求的一部分
int* a = new int[row * column];
for (int iRow = 0; iRow < (row - 1); ++iRow)
for (int jCol = 0; jCol < (column - 1) ; ++jCol)
{
// here you can access a[iRow * row + jCol]
}
*pElement = element throws a EXC_BAD_ACCESS error
int *pRow = *a;
int *pElement = &pRow[0];
int *pElement = &**a[0];