类似于这个问题: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
清除它打电话。
这里是 char **array
.它说array
是一个指针。
它是什么指针?
指向字符的指针。
记住指针运算。
如果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/