c++ - 是什么导致这个数组值改变?

标签 c++ arrays

我对多维数组中的值变化感到有点疯狂,即使赋值似乎没有发生。我正在开发一个程序来查找两个字符串之间最长的公共(public)子序列。为此,我创建了一个数组,其维度是相应字符串的长度。我将数组的第一行和第一列初始化为零,但由于某种原因 arr[2][0] 变成了 1。当 j=0k=5 时,这发生在外部 for 循环的第一次迭代中。

#include <iostream>
#include <string>
#include <math.h>
using namespace std;

int main(int argc, const char * argv[]) {
    // insert code here...
    string a = "bird";
    string b = "turdbi";
    int aLen = a.length();
    int bLen = b.length();
    int arr[aLen][bLen];
    //initializing the multidimensional array
    for (int i=0;i<aLen;i++){
        arr[i][0]=0;
    }
    for (int i=0;i<bLen;i++){
        arr[0][i]=0;
    }
    int subsequence=0;
    for (int j=0;j<aLen;j++){ //(0,0) is the leftmost corner of the table, to compensate for additional row/col
        for(int k=0;k<bLen;k++){
            if (a.at(j)==b.at(k)){
                subsequence = arr[j][k]+1; //add one to upper diagonal
            }
            else {
                subsequence = max(arr[j+1][k],arr[j][k+1]); //find max value from adjacent cells'
            }
            //how does arr[2][0] ==1??
            arr[j+1][k+1]=subsequence;
        }
        cout << endl;
    }

    return 0;
}

最佳答案

评论基本都说了。当您对 j < aLen 和 k < bLen 的限制时,当您执行 j + 1 和 k + 1 时,您的索引超出范围。

至于为什么会这样,数组在内存中是保证顺序存储的。因此,当您创建一个数组 -> int a[2][3] 时,您在内存中创建的就是这个。

0 - a[0][0] -   
1 - a[0][1]  |--- a[0] == &a[0][0] (same type, same value)
2 - a[0][2] -
3 - a[1][0] -
4 - a[1][1]  |--- a[1] == &a[1][0] (same type, same value)
5 - a[1][2] -

&a[0][0], &a[0][1], &a[0][2], &a[1][0]... 是指向 int 的指针。 因此,每次第二个下标递增(在您的情况下为 k),我们都会将指针值递增 sizeof(int)。

&a[0] 和 &a[1] 是指向 3 个整数数组的指针。 意思是,每次第一个下标递增(在您的情况下为 j),我们都会将指针值递增 sizeof(int) * 3,因为我们将地址偏移 3 个整数。

因此,通过执行 a[0][4],我们将编辑 a[1][1] 中的值。在后端,下标运算符只是编译器为您生成偏移量。

关于c++ - 是什么导致这个数组值改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50054500/

相关文章:

C++ map 容器

c++ - 如何确定编译器使用的 C++ 标准的版本?

javascript - JSON 无法警告对象值

c++ - 文本框 MFC SDI 不会出现

c++ - 使用 vector 创建高分系统

c++ - 为 Sprite 混合设置 alpha 上限

c - 如何一次初始化多个结构变量?

c++用输入数据创建数组

arrays - 我如何制作 Perl "array of arrays of hashes"?

javascript - 组数组对象