创建动态二维数组时,A [i * c + j]中c的用途是什么,即c代表什么?

时间:2018-07-25 12:09:55

标签: c++

int *val r,c;
cout << "enter dimensions";
cin >> r >> c;
val = new int[r*c];
for (int i = 0; i < r; i++)
{
    cout << “\n Enter element in row “ << i + 1 << “ : “;
    for (int j=0; j < c; j++)
        cin >> arr [ i * c + j];
}

在上面的代码中,c在表达式arr[i*c+j]中代表什么?但是在普通的二维数组中,我们使用arr[i][j]val = new int[r*c]的含义是什么?在创建动态数组时,我认为[r*c]是分配给变量var或其他变量的列中数组行的总大小吗?如果我没有使用c,则会出现错误,但是当我使用c时,不会出现错误。请告诉我为什么我们在c中使用arr[i*c+j]。我读过某个地方的c表示最大列数。

int *p = new int;
if(!p)
{
    cout << "memory allocation";
}

此外,在上述代码段中,如果条件为true,如何进行内存分配?

1 个答案:

答案 0 :(得分:1)

提示:

这两个代码在做同一件事。

代码1:

const int N = 3;

int arr[N][N];

for(int i = 0; i < N; i++) {
    for(int j = 0; j < N; j++) {
        arr[i][j] = SOMETHING;
    }
}

代码2:

const int N = 3;

int arr[N*N];

for(int i = 0; i < N; i++) {
    for(int j = 0; j < N; j++) {
        arr[i * N + j] = SOMETHING;
    }
}

在第一个代码中,使用了二维数组的经典语法。在第二个代码中,一维数组用于表示二维数组。