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

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

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

第八章  指针类型转换

当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋

值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指

针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向

的类型是一样的。

例十四:

1。 float f=12.3;

2。 float *fptr=&f;

3。 int *p;

在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的

语句吗?

p=&f;

不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一

个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的

方法是不行的。至少在我的MSVC++6.0上,对指针的赋值语句要求赋值号两边的类

型一致,所指向的类型也一致,其它的编译器上我没试过,大家可以试试。为了

实现我们的目的,需要进行“强制类型转换”:

p=(int*)&f;

如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP*和TYPE,

那么语法格式是:

(TYPE*)p;

这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE*,它指向的

类型是TYPE,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都

没有被修改。

一个函数如果使用了指针作为形参,那么在函数调用语句的实参和形参的结

合过程中,也会发生指针类型的转换。

例十五:

void fun(char*);

int a=125,b;

fun((char*)&a);

...

...

void fun(char*s)

{

char c;

c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;

c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;

}

}

注意这是一个32位程序,故int类型占了四个字节,char类型占一个字节。函

数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗?在函数调用

语句中,实参&a的结果是一个指针,它的类型是int *,它指向的类型是int。形
分页:[1] 2 3  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有