如何在main函数声明node类型数组链并传参?代码报错求解
哈希链的参数传递问题解决
错误原因
你遇到的编译错误核心是函数参数类型不匹配:
- main里声明的
node *chain[size]是一个指针数组(每个元素都是指向node结构体的指针) - 当把这个数组传递给insert函数时,它会自动退化为
node **(指向指针的指针) - 但你定义的insert函数参数是
node *chain(单个node指针),类型不匹配导致编译器无法正确解析chain[key]的含义,把它当成了node结构体而非指针,所以出现各种类型错误。
修正方案
把insert函数的参数类型改为node **chain,这样就能正确接收指针数组的地址。
修正后的完整代码
#include<stdio.h> #include<stdlib.h> #define size 10 typedef struct hashNode { int data; struct hashNode *next; } node; // 修改参数类型为node** void insert(node **chain, int data) { node *baby = (node*)malloc(sizeof(node)); baby->data = data; baby->next = NULL; int key = data % size; if(chain[key]==NULL) chain[key] = baby; else { baby->next = chain[key]; chain[key] = baby; } } int main() { node *chain[size]; for(int i=0; i<size; i++) chain[i] = NULL; insert(chain, 10); return 0; }
为什么全局声明时没问题?
当你全局声明node *chain[size]时,在insert函数里直接使用chain时,编译器明确知道它是一个指针数组,chain[key]会被解析为node*类型,所以不会出现类型不匹配的问题。而局部数组传递给函数时必须明确参数类型为指向指针的指针,才能让编译器正确识别数组元素的类型。
内容的提问来源于stack exchange,提问作者Debbie
相关产品推荐
相关产品推荐

