我有一些 C 代码,其工作原理如下:
int main(void)
{
printf("Height: ");
int height;
do
{
height = get_int();
} while (height < 0 || height > 23);
char mtn[height][2*height+2];
for(int i = 0;i <height+1;i++){
for (int j = 0;j<2+height+3;j++){
mtn[i][j] = ' ';
}
}
}
但想让双 for 循环成为一个函数,例如:
char space_mtn(int height);
int main(void)
{
printf("Height: ");
int height;
do
{
height = get_int();
} while (height < 0 || height > 23);
char mtn[height][2*height+2];
strcpy(mtn,space_mtn(height);
}
char space_mtn(int height){
char mtn[height][2*height+2];
for(int i = 0;i <height+1;i++){
for (int j = 0;j<2+height+3;j++){
mtn[i][j] = ' ';
}
}
}
但它不起作用。
最佳答案
在 C 中数组不能按值返回。一种方法是将数组作为参数传递。 (数组参数被调整为指针,这样看起来就好像数组是通过引用传递的,因此函数可以修改原始数组)。
void space_mtn(int height, char mtn[height][2*height+2])
{
for(int i = 0;i < height;i++)
for (int j = 0; j < 2*height+2 ;j++){
mtn[i][j] = ' ';
}
int main(void)
{
// ...
char mtn[height][2*height+2];
space_mtn(height, mtn);
}
注意,我调整了填充循环上的循环边界 - 它们是无意义的和/或写出边界。
此外,传递绑定(bind)到函数的运行时数组当然没有可用的编译时边界检查 - 因此您需要特别注意参数中的边界与您传递的数组相匹配。
关于c - 如何从C中的函数返回2个暗淡字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559811/