一个程序理解指针与结构的关系
来源:互联网 发布:虚拟社交网络对青年人 编辑:程序博客网 时间:2024/06/01 18:28
//调试环境 VC6.0
#include <stdio.h>
struct rt_list_node
{
struct rt_list_node * next; // point to next node.
struct rt_list_node * prev; // point to prev node.
};
typedef struct rt_list_node rt_list_t; // Type for lists.
struct rt_object_information
{
unsigned char type; // object class type.
rt_list_t object_list; // object list.
unsigned char object_size; // object size.
};
#define _OBJ_CONTAINER_LIST_INIT(c) /
{&(rt_object_container[c].object_list), &(rt_object_container[c].object_list)}
struct rt_object_information rt_object_container[3] =
{
{0, _OBJ_CONTAINER_LIST_INIT(0), 20},
{1, _OBJ_CONTAINER_LIST_INIT(1), 20},
{2, _OBJ_CONTAINER_LIST_INIT(2), 20},
};
struct rt_list_node test1;
struct rt_list_node test2;
void main(void)
{
volatile unsigned int t1;
//rt_list_t * volatile pt1;
rt_object_container[0].type=0x73;
rt_object_container[0].object_size=0x22;
test1.next=(struct rt_list_node *)0x1234;
test1.prev=(struct rt_list_node *)0x5678;
rt_object_container[0].object_list.next=&test1;
rt_object_container[0].object_list.prev=&test2;
t1=(unsigned int) &rt_object_container[0];
printf("pt0= %x /n/n", t1);
t1=(unsigned int)&rt_object_container[0].object_list.next;
printf("pt1= %x /n/n", t1);
t1=(unsigned int)&rt_object_container[0].object_list.prev;
printf("pt2= %x /n/n", t1);
t1= (unsigned int) rt_object_container[0].object_list.next;
printf("pt3= %x /n/n", t1);
t1= (unsigned int)rt_object_container[0].object_list.prev;
printf("pt4= %x /n/n", t1);
t1= (unsigned int)rt_object_container[0].object_list.next -> prev;
printf("pt5= %x /n/n", t1);
t1= (unsigned int)&rt_object_container[0].object_list.next -> prev;
printf("pt55= %x /n/n", t1);
t1= (unsigned int)rt_object_container[0].object_list.next->next;
printf("pt6= %x /n/n", t1);
t1= (unsigned int)&rt_object_container[0].object_list.next->next;
printf("pt66= %x /n/n", t1);
t1= (unsigned int)&rt_object_container[0].object_list.next->next->next;
printf("pt666= %x /n/n", t1);
t1= (unsigned int)&rt_object_container[0].object_list.next->next->prev;
printf("pt6666= %x /n/n", t1);
t1= (unsigned int)rt_object_container[0].object_list.next->next->prev;
printf("pt66666= %x /n/n", t1);
}
//特别是提示出错信息0X1238内存不能读。把0x1238作为了一个地址,此地址是受操作系统保护的。
//仔细理解源码中每行、每字符的意义,可以比较好的理解指针、地址、结构体、结构体指针之间的关系。
- 一个程序理解指针与结构的关系
- 理解一个经典的指针小程序
- 对一个程序的思考5(指针与所指数据类型的关系)
- 深入理解 C++ 指针(六)---指针和结构类型的关系
- Directshow中的几种结构的理解与关系
- 一个例子程序对常量指针的理解
- C++指向结构体变量的指针与链表结构的关系应用
- 一个程序的结构
- 一个程序的结构
- 指针和结构类型的关系
- 一个测试结构体和结构体指针的小程序
- 从单链表创建中的内存变化来理解结构体指针与二级指针的用法
- 指针与数组的关系
- 句柄与指针的关系
- 指针与函数的关系
- 数组与指针的关系
- 指针与数组的关系
- 指针与数组的关系
- WebService开发工具AXIS指南
- CentOS 修改IP地址 掩码,网关
- 回调函数
- linux系统命令行下载软件——proz
- mysql 在dos底下出现乱码,在navicat lite下不乱码
- 一个程序理解指针与结构的关系
- .NET,你忘记了么?(二)——使用using清理非托管资源
- 千位长整数相加
- libvlc外部api的简单整理
- puppet学习积累
- no java virtual machine was found after searching the following locations
- JavaScript截取上传文件中的文件名
- t-sql导出EXCEL语句
- Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)