我有一个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("%dt", (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;
}
我的问题是ptr1
或ptr2
不指向arrFillRandom
之前填充的数组。在arrFillRandom
函数中,我用随机数打印出矩阵。例如:
1,0,9 //第一个矩阵的第一行
0,9,4 //第一个矩阵的第二行
8,2 //第二个矩阵的第一行
2,5 //第二个矩阵的第二行
5,5 //第二个矩阵的第三行
但是在main
中,当我想打印这个矩阵的第一个元素时:
printf("n%d", ptr1[0]);
这一行应该打印1,但是它打印的是不相关的数字,比如4096。
那么为什么我不能把这个矩阵存储在这个数组中呢?
您的void arrFillRandom()
函数分配新的内存并将其填充为随机数字。arrayPtr
是函数内部的局部变量,并为其赋一个新值不改变传递的参数ptr1
或ptr2
。
要填充其地址传递给函数的数组,只需删除
行arrayPtr = malloc(sizeof(int) * sizeRow * sizeColumn);
您还必须更改
(arrayPtr + i)[j]
arrayPtr[sizeColumn * i + j]