c - 在 C 中初始化二维字符数组

标签 c arrays initialization

类似于这个问题:2d array, using calloc in C

我需要帮助初始化一个二维字符数组,该数组将全部初始化为某个值(在本例中为“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();

当我尝试编译时从 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();

应该是这样吗?

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();

最佳答案

我认为图片有帮助。这是 char newarray[5][10] .它是一个单一的内存块,由一个包含 10 个字符的数组和一个包含五个字符的数组组成。 你可以用一个 memset 清除它打电话。

enter image description here

这里是 char **array .它说array是一个指针。 它是什么指针? 指向字符的指针。

enter image description here

记住指针运算。 如果array是一个恰好指向一个指针的指针, 然后(*array)等于 array[0] ,这就是 array 的指针指向。

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

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

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

那么newarray怎么样呢?和 array相关?
简单的。 newarray[i][j]newarray 的第 i 个子数组的第 j 个字符.

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

有什么区别? 嗯,缺点array您是否必须逐个构建它。 OTOH,优点是您可以在构建它时将其设置为您想要的大小。 它不必存在于预先已知的固定大小内。

一尘不染?

关于c - 在 C 中初始化二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941470/

相关文章:

检查是否分配了内存中的某个地址

cgo 使用 c struct 数组并在 go 中赋值

JavaScript 函数中的匿名函数行为异常

jquery - 如何在 Jquery 中搜索数组,如 SQL LIKE %value% 语句

python - 带比较运算符的 Numpy 广播;循环迭代

ios - 初始化继承困惑

c++ - 编码 x264(libx264) 原始 yuv 帧数据

c - 编译后需要头文件吗?

c++ - Cpp 中的私有(private)静态数据成员.. 只能在其定义时初始化,而类内初始化无效?

c - 如何声明和初始化整型变量