C++ 在创建动态二维数组时,c在[i*c+;j]中有什么用途,即c代表什么?

C++ 在创建动态二维数组时,c在[i*c+;j]中有什么用途,即c代表什么?,c++,C++,另外,在上面的代码片段中,如果条件为true?提示: 这两个代码在做相同的事情 代码1: int *p = new int; if(!p) { cout << "memory allocation"; } const int N=3; 国际航空公司[N][N]; 对于(int i=0;i

另外,在上面的代码片段中,如果条件为
true

提示:

这两个代码在做相同的事情

代码1:

int *p = new int;
if(!p)
{
    cout << "memory allocation";
}
const int N=3;
国际航空公司[N][N];
对于(int i=0;i
代码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][j] = SOMETHING;
    }
}
const int N=3;
int-arr[N*N];
对于(int i=0;i

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

此代码的第一行很奇怪。它不是
int*val,r,c?你是在问
i*c+j
计算什么?我们得到的是一个二维数组,它存储为一维数组。通常通过
coord_y*max_x+coord_x
计算索引。在本例中,
c
是总列数(也称为max\u x)。第二个问题:如果内存分配失败,将抛出
std::bad\u alloc
(至少如果不关闭异常)。因此,在标准C++环境中,不必通过<代码>运算符new < /COD>检查分配结果。(但无论出于何种原因使用malloc,您都必须这样做!无论如何,您不应该这样做,只有极少数例外情况会迫使您继续使用它,主要是如果您将指针传递给某个声称拥有所有权的C-API—某个非常罕见的东西,15年来从未遇到过任何东西……)。您没有“二维数组”。您使用的是单个数组(因此分配是连续的),该数组由二维计算索引
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;
    }
}
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;
    }
}