c - 创建可变大小矩阵
问题描述
我正在尝试使用一个函数创建一个变量矩阵,该函数输入一个空数组指针并输出带有矩阵中值元素m
的 int 数组指针。我使用变量 k 并向上增加值来完成此操作(不确定这是否是最好的方法)。m
1,2,3,4,...n
我subscripted value is not an array, pointer, or vector
在这里的 for 循环中得到了一个,我matrix[i][j] = k++;
不确定为什么它只出现在 for 循环中而没有其他地方出现。
如果我输入一个称为矩阵的 int 数组指针,我不应该得到这个错误,对吧?
int *create_matrix(int* matrix) {
int i,j;
int k = 0;
// 'total' will be 70 = 10 * 7
int total = sizeof(matrix);
// 'column' will be 7 = size of first row
int column = sizeof(matrix[0]);
// 'row' will be 10 = 70 / 7
int row = total / column;
for (i=0; i < row; i++) {
for (j=0; j < column; j++) {
matrix[i][j] = k++;
}
}
return matrix;
}
int main(void) {
// Creating a custom matrix.
int m[3][4] = {0};
create_matrix(*m);
return 0;
}
解决方案
您需要了解数组和指针之间的区别。您可以将指针指向矩阵,但只要您仅通过指针访问数组,有关大小和维数的信息就会丢失。
你需要做这样的事情:
int *create_matrix(int* matrix, size_t size_x, size_t size_y) {
...
}
int main()
{
int m[3][6];
size_t size_y=sizeof m[0]/sizeof m[0][0];
size_t size_x=sizeof m / sizeof m[0];
create_matrix(m);
}