学会用指针--指针强制转换

更新时间:2023-10-22 07:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学会用指针--指针强制转换

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

#include

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

void show_bytes(byte_pointer start, int len) { int i;

for (i = 0; i < len; i++) printf(\//注释1 printf(\}

void show_twocomp() {

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

show_bytes((byte_pointer) &x, sizeof(short int)); } main() {

printf(\p\\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个位置处的字节

本文来源:https://www.bwwdw.com/article/gw7f.html

Top