创建可变大小矩阵

标签 c

我正在尝试使用一个函数创建一个变量矩阵,该函数输入一个空数组指针 m 并输出值为 1,2 的 int 数组指针 m ,3,4,...n 矩阵中的元素。我使用变量 k 并向上增加值来完成此操作(不确定这是否是最佳方法)。

我在此处的 for 循环中得到一个 subscripted value is not an array, pointer, or vector 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);
}

关于创建可变大小矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54618687/

相关文章:

c - 在 Linux 上使用 C 中的 INI 文件

c - 如何计算模除法

c - C 中的段错误,malloc 数组

c - SDL2 按键重复延迟

java - Java 中的整数返回类型

在最后一个循环之前崩溃

c - Linux线程C服务器

c - 如何将 0xFF 存储到 C 中的字符?

c - Ubuntu 上的 Pro*C 安装

c - 在不复制的情况下将堆数据保存在映射文件中?