初始化的多维数组,用声明初始化和声明后初始化有什么区别

Multidimensional Arrays initialized,What is differnce of Initialize with declarations and Initialize after declaration?

本文关键字:初始化 声明 区别 什么 数组      更新时间:2023-10-16

多维数组初始化有什么区别?

这是"最长公共子序列"问题。

string str1, str2;
getline(cin, str1);
getline(cin, str2);
int alphaCount[26] = { 0, };
int str1Len = str1.length();
int str2Len = str2.length();
int** arr = new int* [str1Len+1];
for (int i = 0; i < str1Len+1; i++)
{
    arr[i] = new int[str2Len+1];
    //Method One
    for (int j = 0; j < str2Len+1; j++)
    {
        arr[i][j] = 0;
    }
}
for (int i = 0; i < str1Len; i++)
{
    for (int j = 0; j < str2Len; j++)
    {
        int y = i + 1;
        int x = j + 1;
        if (str1[i] == str2[j])
            arr[y][x] = arr[y - 1][x - 1] + 1;
        else
        {
            if (arr[y][x - 1] > arr[y - 1][x])// using uninitialized memory ERROR
                arr[y][x] = arr[y][x - 1];
            else
                arr[y][x] = arr[y - 1][x];
        }
    }
}
cout << arr[str1.length()][str2.length()] << "n";


// Method Two
// Not Error
for (int i = 0; i < str1Len + 1; i++)
{
    for (int j = 0; j < str2Len + 1; j++)
    {
        arr[i][j] = 0;
    }
}


// Method Three
//global valiable, Not Error
int arr[1001][1001];

为什么方法一有错误消息警告 C6001:使用未初始化的内存 。

方法

1 和方法 2 有什么区别?

如果列表中的元素多于数字,C++用零填充列表。因此,这个静态数组:

int alphaCount[26] = { 0, };

将把它的所有成员初始化为零(明确地将第一个元素设置为零,并让其他元素自动初始化(。

这:

int** arr = new int* [str1Len+1];
for (int i = 0; i < str1Len+1; i++)
{
    arr[i] = new int[str2Len+1];
    for (int j = 0; j < str2Len+1; j++)
    {
        arr[i][j] = 0;
    }
}

还将数组的所有元素初始化为 0。但是,在这种情况下,数组是 2D 数组,并且是动态分配的(之后不要忘记释放它(。通常,您应该检查新的是否成功。

注意:C++中的静态数组与动态数组。


第二种方法将使用双精度 for 循环将 2D 数组的所有元素初始化为零。


第三种方法将全局数组的元素初始化为零,因为为什么全局变量和静态变量初始化为默认值?