无法在新数组中指向或存储数组元素

时间:2014-05-02 23:01:20

标签: c arrays pointers multidimensional-array

我有一个arrFillRandom函数,用随机数填充数组并将其打印出来。这是:

void arrFillRandom(int *arrayPtr, int sizeRow, int sizeColumn, int randomRange) {
    int i, j;

    arrayPtr = malloc(sizeof(int) * sizeRow * sizeColumn);

    for (i = 0; i < sizeRow; i++)
        for (j = 0; j < sizeColumn; j++)
            (arrayPtr + i)[j] = (rand() % randomRange);

    for (i = 0; i < sizeRow; i++) {
        printf("\n");
        for (j = 0; j < sizeColumn; j++)
            printf("%d\t", (arrayPtr + i)[j]);
    }
}

这是我的main

int main() {
void arrFillRandom(int *arrayPtr, int sizeRow, int sizeColumn, int randomRange);

int matrix1[2][3];
int matrix2[3][2];

int *ptr1, *ptr2;
ptr1 = &matrix1[0][0];
ptr2 = &matrix2[0][0];

arrFillRandom(ptr1, 2, 3, 10);
arrFillRandom(ptr2, 3, 2, 10);

printf("\n%d", ptr1[0]);

return 0;
}

我的问题是,ptr1ptr2未指向之前填充arrFillRandom的数组。 在arrFillRandom函数中,我用随机数打印出矩阵。例如:

  

1,0,9 //第一个矩阵的第一行

     

0,9,4 //第一个矩阵的第二行

     

8,2 //第二行矩阵的第一行

     

2,5 //第二行第二行

     

5,5 //第二行矩阵的第三行

但在main中,当我想要打印此矩阵的第一个元素时:

printf("\n%d", ptr1[0]);

此行应打印 1 ,但会打印不相关的数字,例如4096.

那么为什么我不能将这个矩阵存储在这个数组中呢?

1 个答案:

答案 0 :(得分:0)

您的void arrFillRandom()函数会分配新的内存并使用 随机数。 arrayPtr是函数内的局部变量,并为其指定新值 不会更改传递的参数ptr1ptr2

要填充地址传递给函数的数组,只需删除行

即可
arrayPtr = malloc(sizeof(int) * sizeRow * sizeColumn);

您还必须更改

(arrayPtr + i)[j]

arrayPtr[sizeColumn * i + j]

在该功能内部。