c - 通过指针传递矩阵时出现缺陷值

标签 c pointers

我正在使用一种算法,需要将二维矩阵复制到更大尺寸的二维矩阵中。 当我在同一个主堆栈中工作时,它运行良好,但是当我将复制的矩阵的指针传递给另一个函数时,这些值被损坏。

产生问题的步骤: 1- 将大小为 x 的二维方阵复制到另一个大小为 y 的方阵 (y>x)。 2-将复制矩阵的指针传递给函数。 3-打印函数内的矩阵。

结果将是损坏的值。

int main(void) {
    int tab[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int tab2[5][5];
    int size = 3;

    // Coppying tab to tab2
    for(int i = 0; i<size; i++)
    {
        for(int j = 0; j<size; j++)
        {
            tab2[i][j] = tab[i][j];
        }
    }


    // printing tab2 using myPring Function
    myPrint(tab2, size);
    return 0;
}

void myPrint (int* tab, int size)
{
    for(int i = 0; i<size; i++)
    {
        printf("|");
        for(int j = 0; j<size; j++)
        {
           printf("tab[%d][%d] => %d |", i, j,  *((tab+i*size) + j)  );
        }
        printf("\n");
    }
    printf("____________________________________________\n");
}

最佳答案

*((tab+i*size) + j) 使用 size 计算指针,该指针为 3。然而,虽然 tab2 的每一行只存储了三个值,但它实际上每行有五个元素。

关于c - 通过指针传递矩阵时出现缺陷值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859520/

相关文章:

c - 通过 DLL 调用 C 函数期间 Excel 被锁定

c - adcx 和 adox 的测试用例

c - 如何为简单的命令行解释器解析 fgets 中的字符串以存储在 argv[] 中?

c - 嵌入 Ruby 并编译

c - 确定 C 程序的最简单方法

c - 指向结构体中指针的指针

c - 试图了解释放分配的内存时的行为

C:字符到位并打印

c - 纯粹使用指针动态分配二维数组

c++ - 跳过了 int* 的简单赋值