在C中初始化2D char数组

mal*_*lux 4 c arrays initialization

与此问题类似:2d数组,在C中使用calloc

我需要帮助初始化一个2D char数组,它将全部初始化为某个值(在本例中为'0').我尝试了很多不同的方法,我正在拔头发.请让我知道我做错了什么.此代码不起作用.谢谢!

char** init_array() {
        char newarray[5][10];
        int i, j;
        for (i = 0; i < 5; i++) {
                for (j = 0; j < 10; j++) {
                        newarray[i][j] = '0';
                }
        }
        return newarray;
}
char **array = init_array();
Run Code Online (Sandbox Code Playgroud)

我尝试编译时从gcc获得的错误:

test.c: In function ‘init_array’:
test.c:12:2: warning: return from incompatible pointer type [enabled by default]
  return newarray;
  ^
test.c:12:2: warning: function returns address of local variable [-Wreturn-local-addr]
test.c: At top level:
test.c:14:1: error: initializer element is not constant
 char **array = init_array();
Run Code Online (Sandbox Code Playgroud)

应该是这样吗?

char newarray[5][10];
char** init_array() {
        int i, j;
        for (i = 0; i < 5; i++) {
                for (j = 0; j < 10; j++) {
                        newarray[i][j] = '0';
                }
        }
        return newarray;
}
char **array = init_array();
Run Code Online (Sandbox Code Playgroud)

Mik*_*vey 11

我认为图片有帮助.这是char newarray[5][10].它是一个单独的内存块,由10个字符的数组组成,其中包含5个字符的数组.你可以通过一次memset通话清除它.

在此输入图像描述

这是char **array.它说array是一个指针.什么是指针?指向角色的指针.

在此输入图像描述

请记住指针算术.如果array是指针恰好指向指针,那么(*array)等于array[0],这是指向的指针array.

什么是array[1]?它是数组中指向的第二个指针array.

什么是array[0][0]?它是指向的第一个指针指向的第一个字符array.

什么是array[i][j]?它是指向的第i个指针的第j个字符.array

那怎么样newarrayarray相关?
简单. newarray[i][j]是第i个子阵列的第j个字符.newarray

所以在这个意义上,它就像array,但没有下面的所有指针.

有什么不同?嗯,缺点array是你必须一块一块地建立起来.OTOH,优点是你可以在构建时尽可能大.它不必生活在事先已知的固定尺寸内.

像泥一样清楚?

  • 在声明它时,你也可以简单地将一个静态声明的数组归零:`char newarray [5] [10] = {{0}};` (2认同)
  • 稍等,您需要`#define` 大小,而不是像创建可变长度数组一样提供它们。我会为你发布一个补充答案。 (2认同)
  • @mallux `char newarray[5][10] = { 0 };` (2认同)