【问题标题】:Passing 2D array by reference C and modify values通过引用 C 传递二维数组并修改值
【发布时间】:2017-04-26 17:56:39
【问题描述】:

我正在尝试将 2x2 字符矩阵传递给我的函数,以便我可以修改其中的值。现在在我的代码中,唯一改变的值是矩阵的第一行,它没有改变的第 1 行。

在控制台中,我的结果是

     C[0] = ab 
     C[1] = 

所以 C[1] 没有在我的函数中更新,请帮我弄清楚发生了什么。

这是代码

    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>

    void changeMatrix(char (*matrix)[2][2]){
        strcpy(*matrix[1], "cd");
        strcpy(*matrix[0], "ab");   
    }

    int main(){
        char C[2][2];
        changeMatrix(&C);
        printf("C[0] = %s \n", C[0]);
        printf("C[1] = %s \n", C[1]);

    }

【问题讨论】:

  • 字符串需要 3 个字符的空间 - 2 个字母 + '\0'(字符串终止符)。
  • 就是这样。非常感谢你。但是现在位置 1 带有一些垃圾。 C[0] = ab C[1] = t�cd
  • 不需要那些指针的东西。删除所有*&amp;
  • 是的,现在它正在工作。谢谢
  • 如果您确实通过了matrix,请注意第二行是(*matrix)[1]。您的 *matrix[1] 前进到整个二维数组的末尾,然后取消引用。

标签: c pointers ansi-c


【解决方案1】:

这不是在 C 中声明接收矩阵的函数的方式。 函数原型应该是:

void changeMatrix(char matrix[2][2]);

因为括号中的第一个数字被忽略。 你应该像这样调用函数:

char C[2][2];
changeMatrix(C);

之所以如此,是因为请记住,数组的名称是数组中第一个元素的地址。声明为char C[n][m] 的矩阵是一个包含 n*m 个位置的数组,其中前 m 个位置属于第一列,依此类推。

矩阵就是一种一维数组。

【讨论】:

  • OP 代码和您的代码都是通过引用传递矩阵的正确方法。 (虽然 OP 代码在函数体内出错)
猜你喜欢
  • 2015-05-19
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2020-12-16
  • 2021-03-24
相关资源
最近更新 更多