问题描述
- 关于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* 类型的实体中 我就奇怪了 俩个一模一样的语句 ,上边的没事 下边提示有这个错误。请高手帮看一下 这是什么原因啊
解决方案
这个是我的整体代码 如下:
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("okn");
}
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了
解决方案二:
我的思路是直接一个循环直接赋值。但是在赋值前一个的指针时就有这种提示 :不能将 sum * 类型的值 分配到 sum* 类型的实体 。
我不能理解 按照道理来讲 。
通过循环和判断得到当前 p->phead
p->phead->pnext 为下个结构体
n1->pbefore = p->phead; //这里是对 添加的数据n1的前指针进行赋值的 没错啊 但是提示这里有错误。
p->phead->pnext = n1; 这里是没有错的。
解决方案三:
就是提示sum* 类型的值不能分配到sum* 类型的实体 。
求解答 。以前写的时候都没有这个提示的 只是想改下程序 换个方法 就这样了
解决方案四:
开始程序都是能正确运行的,主要是 后来在添加删除功能时 。就想到直接在结构中加个前指针 那样方面 。但是当
开始对前指针赋值时出现了这个问题。前面的程序没有问题的 主要在这个前指针赋值上。求解答一下。
解决方案五:
这是一条编译错误提示。
代表在代码中,把一个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字节,该操作会导致信息丢失。
解决方案六:
n1->pbefore = p->phead; //这里是对 添加的数据n1的前指针进行赋值的 没错啊 但是提示这里有错误。
这里需要这么写 n1->pbefore = p->phead->pbefore; 两种不同类似不能赋值;