c - 在 C 中传递和修改二维数组的单行

标签 c arrays pointers multidimensional-array

首先,我对 C 没有信心,但我有一个 2D int 数组,我想要一个函数来写入该数组的单行的所有值。

例如:

int main(int argc, char *argv[])
{ 
    int a[2][2];
    a[0][0] = 1;
    a[0][1] = 2;
    a[1][0] = 3;
    a[1][1] = 4;
    change_array(&a[0]);
}

void change_array(int* array[])
{
    (*array)[0] = -1; 
    (*array)[1] = -1;        
}

程序立即崩溃。我尝试将 change_array 函数更改为 array[0] = -1 并且...它有效!值被正确更改(我不知道为什么,因为它应该是完全错误的),但如果我在程序的其他部分使用此函数,则数组的值保持不变。 这怎么可能呢?有什么建议可以成功更改我的数组的值吗? 非常感谢!

最佳答案

你可以尝试这样做:

#include <stdio.h>

void change_array(int array[2][2])
{
    array[0][0] = -1;
    array[0][1] = -1;
}

int main(int argc, char *argv[])
{
    int a[2][2];
    a[0][0] = 1;
    a[0][1] = 2;
    a[1][0] = 3;
    a[1][1] = 4;
    printf("%d %d\n%d %d\n\n", a[0][0], a[0][1], a[1][0], a[1][1]);
    change_array(a);
    printf("%d %d\n%d %d\n\n", a[0][0], a[0][1], a[1][0], a[1][1]);
}

这取决于您的需求,但在某些情况下,我发现最好使用单维数组并为 2 维构建 getter/setter。这样的解决方案可以在这个答案中找到:Correct way to allocate and free arrays of pointers to arrays

关于c - 在 C 中传递和修改二维数组的单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17275052/

相关文章:

c - 启动多个 CUDA 内核是否需要返回每个内核的主机?

c - 已分配动态数组,但不能使用它

java - java 子线程数组访问

python - 替换 numpy 数组中特定索引处的元素

c++ - 如何使用对象数组访问类中的变量?

c - 段错误、指针问题?

总结二维数组的函数的缓存行为

ruby - 扁平化 Ruby 数组

c++ - 在每次方法调用时覆盖局部变量指针

c - 我的 scanf 循环之一在执行之前要求两个输入。空白问题?