HMHMHT 2023-03-16 00:01 采纳率: 66.7%
浏览 70

关于C中哈希表插入函数传参为何必须二级指针的问题

C中哈希插入键值 传入的哈希表为何必须是双重指针类型?
我自己试过传入

set 的内部实现是双向链表
那我插入操作是无需修改整个外部结构的地址一个个上链即可
但在 传参一致性没问题的如下情况下 我传递结构体指针为何没有进行实际的插入

void insertSet(mySet *set,int mykey)
  insertSet(set2,nums2[i])

如上 我发现根本没有插入,有没大手子 能指点一下



typedef struct MY_SET
{
    int key;//key值
    //type char [100];自定义类型可以不存在  只关心KEY KEY不可以重复
    UT_hash_handle hh;

}mySet;



mySet *find(mySet *set,int mykey)//传入指向SET的指针 以及键值、
{
    mySet *tmp;
    HASH_FIND_INT(set,&mykey,tmp);
    return tmp;
}


void insertSet(mySet **set,int mykey)
{
    mySet *judge =find(*set,mykey);

    if(judge == NULL)
    {
      judge = (mySet *)malloc(sizeof(mySet) );
      judge->key = mykey;
      HASH_ADD_INT(*set,key,judge); 
    }
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
    //1放入哈希 转为哈希
    //2遍历查询哈希表是否出现 若出现放入res
 
    int* res ;
    int i,cnt1,cnt2,cnt;
    mySet *set1 =NULL;
    mySet *set2 =NULL;
    mySet *s ,*tmp;
    mySet *p;
    *returnSize=0;

    for(i=0;i<nums1Size;i++)
    insertSet(&set1,nums1[i]);

    cnt1 =HASH_COUNT(set1);

    for(i=0;i<nums2Size;i++)
    insertSet(&set2,nums2[i]);

    cnt2 =HASH_COUNT(set2);
 
    res = malloc(sizeof(int) * (cnt1+cnt2));

    if(cnt1>cnt2)
    {
        HASH_ITER(hh,set2,s,tmp)
        {
            if(find(set1,s->key))
            res[(*returnSize)++] = s->key;
        }


    }
    else
    {
        HASH_ITER(hh,set1,s,tmp)
        {
            if(find(set2,s->key))
            res[(*returnSize)++] = s->key;
        }

    }


return res;

}
  • 写回答

5条回答 默认 最新

  • 於黾 2023-03-16 10:10
    关注

    因为下面要调用的HASH_ADD_INT函数里需要一个指针类型
    如果你的set本身就只是一个一级指针,那到下面*set它变成一个结构体了,不是结构体指针了
    包括find函数里也一样需要一个指针类型
    你要改,那要把里面所有调用的函数也都改掉,只改一个那肯定下面类型全都不对了

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录