我有一些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] = ' ';
}
}
}
但它不起作用。
数组不能通过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);
}
注意,我调整了填充循环上的循环边界-它们是无用的和/或超出边界的。
同样,传递给函数的运行时数组当然没有可用的编译时边界检查-因此,您需要格外小心,以确保参数中的边界与传递的数组相匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句