动态链表的插入问题???大家棒棒梦,拜谢了
大家好!首先祝大家新年快乐,万事如意!像我这样没有回家过年的单身汪,只能在房间里默默的研究代码了。。。。
首先来看看代码
#include <stdio.h>
struct DATA
{
int num;
struct DATA *p;
}data,*sp=&data;
int main()
{
int a=11,b;
sp->p=sp;
sp->num=10;
printf("&data=%d\n",&data);
printf("sp=%d\n",sp);
printf("&sp->num=%d\n",&sp->num);
printf("sp->p=%d\n",sp->p);
printf("sp->num=%d\n",sp->num);
printf("*sp->p=%d\n",*sp->p);
b=*sp->p;/*这里的意思是结构体中的指针p所指向的数值复制给变量b*/
if(a>b)
printf("a>*sp->p\n");
else
printf("a<*sp->p\n");
return 0;
}
如果用红色字体的那样做是行不通的,原因为类型不兼容,从逻辑上讲*p指向的同样是一个整型的数,为什么会不兼容呢?(我猜想可能因为p是结构指指针的原因,这是第一个问题)
上面的方法行不通,那么我们在换一种方法试试看,代码如下:
#include <stdio.h>
struct DATA
{
int num;
struct DATA *p;
}data,*sp=&data;
int main()
{
int a=11;
sp->p=sp;
sp->num=10;
printf("&data=%d\n",&data);
printf("sp=%d\n",sp);
printf("&sp->num=%d\n",&sp->num);
printf("sp->p=%d\n",sp->p);
printf("sp->num=%d\n",sp->num);
printf("*sp->p=%d\n",*sp->p);
if(a>*sp->p)
printf("a>*sp->p\n");
else
printf("a<*sp->p\n");
return 0;
}
代码中红色字体部分,这样也是错误的,原因是'>' : illegal for struct。为什么会提示说‘>’要指向结构呢?(这是第二个问题)。
当然看到这里肯定有人会纳闷,我为什么要用这样的方法呢,
原因是这样的,如果有一个链表B>B>C>E,我想在中间插入D,那么就需要判断D的位置,所以当指针到达C时只能通过这种方式找到E然后比较D是否在C和E之间,不过还用一种方法,就是多定义一个结构指针来指向E。这里我想知道如果我就是要用第一种方法,有什么解决办法么? // VC++6.0 Debug模式下 反汇编结果:
21: printf("*sp->p=%d\n",*sp->p);
004010AF mov eax,
004010B4 mov ecx,dword ptr
004010B7 mov edx,dword ptr
004010BA push edx
004010BB mov eax,dword ptr
004010BD push eax
004010BE push offset string "*sp->p=%d\n" (00422034)
004010C3 call printf (00401140)
004010C8 add esp,0Ch
上述已经很明显了吧?如果没看过汇编,看下边。
还有,指正一点:*p并非指向一个整型的数,而是一个struct DATA.
解释:*sp->p '->'比'*'优先级高,所以先(sp->p)获得一个struct DATA*类型,然后'*'操作取得的结果是一个struct DATA结构体类型,并非主观以为的整型。
// 下边那种情况相同,我也就不多说了 n0noper 发表于 2016-3-3 10:09
谢谢,说的很详细了,(*sp->p->num)。受教了,非常感谢。
页:
[1]