如何将函数中的结构数组用作C中的参数



我正在尝试用linkedlist节点填充数组。但是我犯了一些错误。

  • 列表结构
  • fillArray方法
struct List
{
char frequency[STRING_LEN];
char word[STRING_LEN];
char lineOrder[STRING_LEN];
struct List *next;
};
void fillArray(struct List *nodesArr[50]){
int a=0;
struct List *ptr = head;  // head is my first node for linkedlist. I have created this earlier.

while(ptr->next!=NULL){

*nodesArr[a]->frequency=ptr->frequency; // I get error here
*nodesArr[a]->word=ptr->word; //  and here  *assignment to 'char' from 'char *' makes integer from* //*pointer without a cast*
ptr=ptr->next;
a++;

}
}
*assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion]gcc* error
[error][1]
[error2][1]

我还在主函数中声明nodesArr,如下所示:

struct List *nodesArr[length()];

我调用fillArray方法如下:

fillArray(*nodesArr); // How should I put an array as a parameter?

我不知道如何在函数中使用结构数组作为参数,以及如何避免类型转换错误。任何帮助都将不胜感激提前感谢

编辑我已经转换了fillArray方法,使其更加清晰。

void fillArray(struct List **nodesArr){
int a=0;
struct List *ptr = head;

while(ptr->next!=NULL){


strcpy(nodesArr[a]->frequency,ptr->frequency);
strcpy(nodesArr[a]->word,ptr->word);
ptr=ptr->next;
a++;

}
}

编辑2头定义为全局

struct List *head = NULL;

我用这种方法填写标题链接列表:

void insertFirst(char *data, char *frequency, char *lineOrder)
{
struct List *link = (struct List *)malloc(sizeof(struct List));
strcpy(link->word, data); // To copy the elements of data to new node's word
strcpy(link->frequency, frequency);
strcpy(link->lineOrder, lineOrder);
link->next = head;
head = link;
}

您遇到的困惑是因为数组在C中不是一流的类型,而且有很多事情您无法使用它们。特别是:

  • 不能将函数参数声明为数组。如果您这样做,编译器将静默地将其转换为指针,而不会出现警告或错误。对于刚接触C的程序员来说,这是一个常见的困惑来源。在您的情况下,当您声明fillArray(struct List *nodesArr[50])时,就好像您声明了fillArray(struct List **nodesArr)一样
  • 不能将数组作为参数传递。如果这样做,它将被静默地转换为指向数组第一个(第0个(元素的指针

现在,上面的静默转换可能看起来很奇怪,但它们通常会成功,因为数组索引是静默转换为指针算术的,所以就大多数使用而言,使用指向数组第一个元素的指针的方式与使用数组的方式相同。因此,在函数中,可以使用双指针,就好像它是一个指针数组一样,一切都会好起来的。唯一美中不足的是sizeof不能正常工作——它给出的是指针的大小,而不是数组的大小。

相关内容

  • 没有找到相关文章

最新更新