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 里面的值 ?? */ sha daimazhem luan ... 没有C++的环境了{:10_247:} 代码看懂了,只是不懂lz问的啥。。
页:
[1]