全部博文(161)
分类: 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个位置处的字节