我正在使用一种算法,需要将二维矩阵复制到更大尺寸的二维矩阵中。 当我在同一个主堆栈中工作时,它运行良好,但是当我将复制的矩阵的指针传递给另一个函数时,这些值被损坏。
产生问题的步骤: 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/