考试网 >> IT认证 >> 等级 >> 等级动态 >> C语言笔记 第八章 指针类型转换

C语言笔记 第八章 指针类型转换

发布时间:2006-07-25 11:56     点击:
分页:上一页  1 [2] 3  下一页

参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过

程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可

以这样来想象编译器进行转换的过程:编译器先构造一个临时指针 char*temp,

然后执行temp=(char*)&a,最后再把temp的值传递给s。所以最后的结果是:s的

类型是char*,它指向的类型是char,它指向的地址就是a的首地址。

我们已经知道,指针的值就是指针指向的地址,在32位程序中,指针的值其

实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢?就象

下面的语句:

unsigned int a;

TYPE *ptr;//TYPE是int,char或结构类型等等类型。

...

...

a=20345686;

ptr=20345686;//我们的目的是要使指针ptr指向地址20345686(十进制



ptr=a;//我们的目的是要使指针ptr指向地址20345686(十进制)

编译一下吧。结果发现后面两条语句全是错的。那么我们的目的就不能达到

了吗?不,还有办法:

unsigned int a;

TYPE *ptr;//TYPE是int,char或结构类型等等类型。

...

...

a=某个数,这个数必须代表一个合法的地址;

ptr=(TYPE*)a;//呵呵,这就可以了。

严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。这里的(TYP

E*)的意思是把无符号整数a的值当作一个地址来看待。

上面强调了a的值必须代表一个合法的地址,否则的话,在你使用ptr的时候

,就会出现非法操作错误。

想想能不能反过来,把指针指向的地址即指针的值当作一个整数取出来。完

全可以。下面的例子演示了把一个指针的值当作一个整数取出来,然后再把这个

整数当作一个地址赋给一个指针:

例十六:

int a=123,b;

int *ptr=&a;

char *str;

b=(int)ptr;//把指针ptr的值当作一个整数取出来。

str=(char*)b;//把这个整数的值当作一个地址赋给指针str。

好了,现在我们已经知道了,可以把指针的值当作一个整数取出来,也可以
分页:上一页  1 [2] 3  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有