Chinaunix首页 | 论坛 | 博客
  • 博客访问: 708568
  • 博文数量: 161
  • 博客积分: 2998
  • 博客等级: 少校
  • 技术积分: 1697
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-28 09:39
文章分类

全部博文(161)

文章存档

2012年(6)

2011年(120)

2010年(35)

分类: LINUX

2011-04-23 21:55:11

    指针有着非常重要的地位,它的运用非常灵活,正因为此也给软件带来了许多不安全因素.所以在JAVA中取消了指针的概念,但是要注意的是它仍然以数组的形式存在,正确灵活的运用它可以有效的表示复杂的数据结构、动态的分配内存、方便的使用内存中的字符串(下面的例子会说明这个问题)、有效的使用数组等.因此编写优秀的软件以及深入的理解程序语言,指针非常重要.

   下面是一段C代码,展示了用指针的强制转换类型来访问对象的字节表示.


#include 

typedef unsigned char *byte_pointer;  //将指针变量声明为类型"unsigned char",内存中指向1个字节

void show_bytes(byte_pointer start, int len)
{
    int i;
    for (i = 0; i < len; i++)
 printf(" %.2x", start[i]);  //注释1
    printf("\n");
}

void show_twocomp() 
{

    short int x = 12345; //12345的十六进制表示为:00 00  30 39 ,这里涉及"/小端机"问题,请大家查阅相关质料
    show_bytes((byte_pointer) &x, sizeof(short int)); 

}


 main()
{

      printf("calling show_twocomp\n");
      show_twocomp();
      return 0;
}

VC++6.0中运行结果为:

----------------------------------

calling show_twocomp

39 30

----------------------------------

 

下面把兰色unsigned char *类型改为int *类型,表示指向4个字节,VC++6.0中运行结果为:

----------------------------------

calling show_twocomp

cccc3930 13ff80

----------------------------------

下面通过图解来分析原因:如图所示:

可见:定义指针类型实质是确定指针所指向内存的单位量,:int *表示指向的一个单位量为4字节(图中红色部分所示),unsigned char * 1个字节.上面的代码可以解释为:(unsigned char *)&x &X地址(无论以前是什么数据类型),现在都指向unsigned char 类型了,这时指针指向内存的单位量为1个字节,图中兰色所示.

注释1.C,我们能够用数组表示发来引用指针,同时也能用指针表示法来引用数组元素,代码中,引用start[i]表示想要读取以start指向的位置为起始的第i个位置处的字节

阅读(1460) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~