You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:52:15