簡體   English   中英

將 char 二維數組傳遞到 c 中的 void function

[英]passing a char 2d array into a void function in c

我是 c 的新手,但我已經嘗試了很長時間,試圖讓它工作,盡管它看起來很簡單。

所以下面是我打算做的工作,但我想制作 2 個函數:fillseats() 和 printseatingplan()[現在我只希望它們全部空白];

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
    char seatingplan[15][15];

    memset(seatingplan,'.',sizeof seatingplan);
    
    for (int k = 0; k < 15; ++k)
    {
        for(int j = 0; j < 15; ++j)
        {
            printf("%c",seatingplan[k][j]);
        }
        printf("\n");
    }
}

因此,每當我嘗試在沒有指針的情況下運行這些函數時,它都會給我這些 �`:�ij:�i�d:�iH@=�i�B��ik:�

我怎樣才能使用指針來解決這個問題

我可以將這個數組傳遞給 printseatingplan() 所在的函數嗎

void printseatingplan(char array[15][15])
{
    for (int k = 0; k < 15; ++k)
    {
        for(int j = 0; j < 15; ++j)
        {
            printf("%c",array[k][j]);
        }
        printf("\n");
    }
}

然后 fillseats() 做:

void fillseats(char array[15][15])
{
    memset(array,'.',sizeof array);
}

sizeof只會給你指針的大小,而不是整個數組。

您需要將大小傳遞給 function。我會使用指向數組的指針:

void fillseats(size_t rows, size_t cols, char (*array)[cols])
{
    memset(array,'.',rows * sizeof(*array));
}

void printseatingplan(size_t rows, size_t cols, char (*array)[cols])
{
    for (size_t row = 0; row < rows; row++)
    {
        for(size_t col = 0; col < cols; col++)
        {
            printf("%c",array[row][col]);
        }
        printf("\n");
    }
}

char array[15][15]當用作 function 的參數時“衰減”為指向第一個元素的指針,在本例中相當於char (*array)[15]) 如果您執行sizeof array而不是 function,您將獲得指針的大小(4 或 8 等)。 如果你執行sizeof *array ,你只會得到一維的大小,15。

一個簡單的修復方法:

#include <stdio.h>
#include <string.h>

void fillseats (size_t x, size_t y, char array[x][y])
{
    memset(array, '.', sizeof(char[x][y]));
}

void printseatingplan (size_t x, size_t y, char array[x][y])
{
    for (size_t i = 0; i < x; i++)
    {
        for(size_t j = 0; j < y; j++)
        {
            printf("%c",array[i][j]);
        }
        printf("\n");
    }
}

int main (void)
{
    char seatingplan[15][15];

    fillseats(15, 15, seatingplan);
    printseatingplan(15, 15, seatingplan);
}

數組的大小與其類型有關。 問題是數組類型的參數衰減為指針。 為了防止它,您可以傳遞一個指向數組的指針。 指針不會衰減,因此數組類型的基本部分占上風。

void printseatingplan(char (*array)[15][15])
{
    for (int k = 0; k < 15; ++k)
    {
        for(int j = 0; j < 15; ++j)
        {
            printf("%c", (*array)[k][j]);
        }
        printf("\n");
    }
}

void fillseats(char (*array)[15][15])
{
    memset(*array,'.',sizeof *array);
}

int main (void)
{
    char seatingplan[15][15];

    fillseats(&seatingplan);
    printseatingplan(&seatingplan);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM