我有一些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] = ' ';
}
}
}
但是想让double 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] = ' ';
}
}
}
但它不起作用。
答案 0 :(得分:1)
无法通过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);
}
注意,我调整了填充循环上的循环边界 - 它们是无意义的和/或写出界限。
此外,传递绑定到函数的运行时数组当然没有可用的编译时边界检查 - 因此您需要特别注意参数中的边界与要传递的数组匹配。