[英]how to return 2 dim char array from function in C
我有一些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);
}
注意,我調整了填充循環上的循環邊界-它們是無用的和/或超出邊界的。
同樣,傳遞給函數的運行時數組當然沒有可用的編譯時邊界檢查-因此,您需要格外小心,以確保參數中的邊界與傳遞的數組匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.