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

文章作者 100test 发表时间 2007:03:10 17:24:11
来源 100Test.Com百考试题网


第八章 指针类型转换
当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋
值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指
针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向
的类型是一样的。
例十四:
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。形
参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过
程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可
以这样来想象编译器进行转换的过程:编译器先构造一个临时指针 char*temp,
然后执行temp=(char*)&.a,最后再把temp的值传递给s。所以最后的结果是:s的
类型是char*,它指向的类型是char,它指向的地址就是a的首地址。

相关文章


安徽启动计算机图形图像等级证书考试11月开考
2006年(上)全国计算机等级考试报名通知
C语言笔记第八章指针类型转换
江苏:合肥市2006计算机等级考试4月1日开考设19考点
湖北:12万人参考周六计算机等级考
山东:计算机等级考试4月1日进行
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛