Can';t将数组的元素指向或存储在新数组中
我有一个Can';t将数组的元素指向或存储在新数组中,c,arrays,pointers,multidimensional-array,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 =
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]);
}
}
我的问题是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]
到
在该函数内部。谢谢您的解决方案,但我有点困惑。如果我不写任何关于内存的东西,如果我不使用
malloc
,编译器怎么知道应该为这个数组分配多少空间?我想,matrix1[2][3]
和matrix2[2][2]
就足够了,对吧?当我在数组中使用指针时,有时会很难理解。@lombranzo:是的,matrix1[2][3]
已经是数组了。顺便说一句,您可以将函数调用为arrFillRandom(matrix1,2,3,10)因为数组作为参数传递给函数时会“衰减”到指向第一个元素的指针。我知道,但在赋值中,它被要求像我写的那样调用该函数。再次感谢。:)天哪,关于矩阵乘法我也有同样的问题。如果你能看一下,我会很感激的:@lombranzo:你的arrFillRandom函数中还有另一个错误,因此矩阵没有正确填充。请参阅更新的答案。
(arrayPtr + i)[j]
arrayPtr[sizeColumn * i + j]