xjiangyou 发表于 2016-8-10 19:07:36

C 结构未解之谜,有原代码

#include "stdafx.h"
#include <windows.h>

typedef struct _DATA_LINK
{
        /*链域,*llink是左链域指针,*rlink是右链域指针*/
        struct _DATA_LINK *L;             // 定义一个结构指针
        struct _DATA_LINK *R;             // 定义一个结构指
        // struct _DATA_LINK *Head;
       
        int data; /*数据域*/
        int data2;
       
}DATA_LINK,*PDATA_LINK;

VOID Link_Test();

//LIST_ENTRY My_List; //自定义链接头


PDATA_LINK head=new DATA_LINK;//定义一个指针结构结构申请一块内存
PDATA_LINK        pData; // 定义一个指针结构结构变量


int main(int argc, char* argv[])
{
   
    Link_Test();

        return 0;
}

VOID Link_Test()// 链接 测试
{
       
        //初始化链表
        head->L = head->R = head; // 让头的   L R 指向自己
        head->data=0;          //数据初始化
        head->data2=0;         //数据初始化
    printf("head=%x\n",head);//打印出 头的地址
        PDATA_LINK Tlink;// 定义一个结构指针类型结构变量-
       
        //在链表中插入5个元素
        printf(("开始构建链表 \n"));
        for (int i=1 ; i<=5 ; i++)//循环5次
        {
                pData =new DATA_LINK;//申请了一块内存
               
                pData->data = i;
                pData->data2= i+1;
                //
                Tlink=head->R;//保存后续结点指向了头的起始地址
               
                Tlink->L=pData;// 头 左 指向 结构pData在内存中的起始地址
                head->R=pData;//头 右 指向 结构pData在内存中的起始地址
                //
                pData->R=Tlink;
                pData->L=head;
               
                //printf("Node%d=%x,R=%x,L=%x,%d,%d\n",
                //        pData->data-7,pData,pData->R,pData->L,pData->data,pData->data2);       
        }
       
        //从链表中取出,并显示
        printf("head=%x\n",head);
       
    PDATA_LINK pnode=head;// 新声明结构变量指向 head 结构变量
           do   //判断 R遍历完成否
        {
               
                //显示链表内存结构
                printf("结点%d=%x,\tL=%x,\t R=%x,\t%d,\t%d\n",
                        pnode->data,pnode,pnode->L, pnode->R,pnode->data,pnode->data2);
                //                  address    L         R
                pnode=pnode->L; //改变判断条件
               
        } while (pnode != head);//while (!(pnode==head));
       
}

/*         这段代码能模拟出链接表的结构 求解下面的 while 循环 只是把结构pnode 地址 指向了自身结构中的 L结构
为何打出的地址 data 1 2 会是上面 for循环中 pData 里面的值pnode指向的是 head 而 head 的结构只有
head->R=pData;下面while循环 pnode并没有指向自身的pnode->R却打印出的是 pnode->R 指向的
pData 里面的值 ??                            */

Angel丶L 发表于 2016-8-10 19:18:21

sha daimazhem luan ...

大天使 发表于 2016-8-11 00:46:18

没有C++的环境了{:10_247:}

迷雾少年 发表于 2016-8-11 09:51:11

代码看懂了,只是不懂lz问的啥。。
页: [1]
查看完整版本: C 结构未解之谜,有原代码