z18256024423
2016-05-13 15:12 浏览 1.1k

关于c的双向链表中的问题求解答

typedef struct sum {
int num;
int length;
struct sum * pnext; 下个节点
struct sun * pbefore; 上个节点
} number;

我在添加函数中
n1 = (number *)malloc(sizeof(number) );
printf("请输入数字.\n");

scanf_s("%d",&( n1->num));

printf("请输入标记数字。\n");
scanf_s("%d",&n1->length);
n1->pnext = n1;         //这里正确通过了
n1->pbefore = n1;    //这里提示 不能将 number *类型的值 分配到  sum* 类型的实体中

我就奇怪了  俩个一模一样的语句  ,上边的没事 下边提示有这个错误。请高手帮看一下 这是什么原因啊
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答 默认 最新

  • z18256024423 z三分天注定七分靠打拼 2016-05-13 15:21

    这个是我的整体代码 如下:
    number * n;
    n = p->pheads;
    number * n1;
    n1 = (number *)malloc(sizeof(number) );
    printf("请输入数字.\n");

    scanf_s("%d",&( n1->num));
    
    printf("请输入标记数字。\n");
    scanf_s("%d",&n1->length);
    n1->pnext = n1;                                 //这个却没有提示  。请问是什么原因啊
    n1->pbefore = n1;                            //这里提示错误,不能将 number * 类型的值 分配 到sum*类型的实体 
    if (!empty(*p))
    {
        p->pheads = n1;
        printf("ok\n");
    }
    else
    {
        while (p->pheads->pnext != NULL)                         //循环寻找到最后的空指针
        {
            p->pheads->pnext = p->pheads->pnext->pnext;
        }
    
        n1->pbefore = p->pheads;         //这里也提示那样的错误 ,显示 不能将sum* 类型的值 分配到 sum* 类型的实体
        p->pheads->pnext = n1;
        p->pheads = n;
    }
    

    // p->pheads = n; //重新定位头指针

    }
    这个是我的添加函数中的代码。

    结构体如下:typedef struct sum {
    int num;
    int length;
    struct sum * pnext;
    struct sun * pbefore;
    } number;
    这个是结构体

    typedef struct phead {
    number * pheads;
    }ph;
    求高手解答一下。3q了

    点赞 评论 复制链接分享
  • z18256024423 z三分天注定七分靠打拼 2016-05-13 15:28

    我的思路是直接一个循环直接赋值。但是在赋值前一个的指针时就有这种提示 :不能将 sum * 类型的值 分配到 sum* 类型的实体 。
    我不能理解 按照道理来讲 。

           通过循环和判断得到当前   p->phead 
                                                 p->phead->pnext 为下个结构体
    
                                                                            n1->pbefore = p->phead;    //这里是对 添加的数据n1的前指针进行赋值的  没错啊   但是提示这里有错误。
                                                                            p->phead->pnext  = n1;   这里是没有错的。
    
    点赞 评论 复制链接分享
  • z18256024423 z三分天注定七分靠打拼 2016-05-13 15:31

    就是提示sum* 类型的值不能分配到sum* 类型的实体 。

    求解答 。以前写的时候都没有这个提示的 只是想改下程序 换个方法 就这样了

    点赞 评论 复制链接分享
  • z18256024423 z三分天注定七分靠打拼 2016-05-13 15:38

    开始程序都是能正确运行的,主要是 后来在添加删除功能时 。就想到直接在结构中加个前指针 那样方面 。但是当
    开始对前指针赋值时出现了这个问题。前面的程序没有问题的 主要在这个前指针赋值上。求解答一下。

    点赞 评论 复制链接分享
  • q610098308 恋恋西风 2016-05-13 15:58

    这是一条编译错误提示。
    代表在代码中,把一个int**类型的值,赋值给了int类型的变量。
    类似于
    int v;
    int *p = &v;
    然后做了
    v = &p;
    这样的操作。

    类似操作,大多数是误写,本来要写
    p=&v;
    但是写成了
    v=&p;
    针对修改即可。

    如果确定要把int**值赋值给int,可以采用
    v=(int)&p;
    的方式。
    不过需要注意的是,在16位和32位系统中,可以完整保存地址值,但是在64位系统中,int**占8字节,而int占4字节,该操作会导致信息丢失。

    点赞 评论 复制链接分享
  • q610098308 恋恋西风 2016-05-13 16:12

    n1->pbefore = p->phead; //这里是对 添加的数据n1的前指针进行赋值的 没错啊 但是提示这里有错误。
    这里需要这么写 n1->pbefore = p->phead->pbefore; 两种不同类似不能赋值;

    点赞 评论 复制链接分享

相关推荐