使用双指针将数组传递给函数

时间:2018-08-19 17:43:56

标签: c arrays double-pointer

我正尝试通过以下代码中的函数来更新数组,但效果很好。

char bookCategory[][MAX_CATEGORY_NAME_LENGTH] = {"Computer", "Electronics", "Electrical", "Civil", "Mechnnical", "Architecture"};

uint8_t getCategoryNumAndName(char* catName, uint8_t choice)
{
    choice = choice - 0x30 - 1;  /** Category starts from 1 on the screen */
    if (choice >= (sizeof (bookCategory) / sizeof (bookCategory[0])))
    {
        //catName = NULL;
        return (0xff);
    }
    else
    {
        strcpy(catName,bookCategory[choice]);
        //catName = bookCategory[choice];
        return(choice);
    }

}

void addBooks(void)
{

// Some code here

char categoryName[30];
uint8_t catNumber;
catNumber = getCategoryNumAndName(categoryName, choice);

// Some code here
}

但是我想到了使用双指针而不是使用strcpy()。我尝试下面的代码,但出现不兼容的指针类型错误。如何从addBooks()的以下代码中调用getCategoryNumAndName()?

uint8_t getCategoryNumAndName(char** catName, uint8_t choice)
{
    choice = choice - 0x30 - 1;  /** Category starts from 1 on the screen */
    if (choice >= (sizeof (bookCategory) / sizeof (bookCategory[0])))
    {
        *catName = NULL;
        return (0xff);
    }
    else
    {
        //strcpy(catName,bookCategory[choice]);
        *catName = bookCategory[choice];
        return(choice);
    }

}

void addBooks(void)
    {

    // Some code here

    char categoryName[30];
    uint8_t catNumber;
    catNumber = getCategoryNumAndName(&categoryName, choice);

    // Some code here
    }

2 个答案:

答案 0 :(得分:0)

您只能将指针地址传递给getCategoryNumAndName函数,而不能传递给数组地址。 您可以执行以下操作。

    char *categoryName = NULL;
    catNumber = getCategoryNumAndName(&categoryName, choice);

在取消引用之前,请确保将内存分配给categoryName中的getCategoryNumAndName

答案 1 :(得分:-1)

要仅使代码起作用,您需要将categoryName强制转换为char**。但是阅读您的代码,似乎只是想移动指针?类别名称不需要固定大小的数组。只需使用一个指针:

char* categoryName;