Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不使用数组表示法分配2D数组_C++_Arrays_Pointers_2d - Fatal编程技术网

C++ 不使用数组表示法分配2D数组

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

正在处理一个赋值,该赋值要求创建和遍历二维整数数组,但没有使用数组表示法,例如[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];   // 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];