<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LINUXQQ &#187; 指针类型转换</title>
	<atom:link href="http://www.linuxqq.net/archives/tag/%e6%8c%87%e9%92%88%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxqq.net</link>
	<description>LINUXQQ狂人时代</description>
	<lastBuildDate>Tue, 10 Jan 2012 04:39:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>C语言笔记  指针类型转换</title>
		<link>http://www.linuxqq.net/archives/86.html</link>
		<comments>http://www.linuxqq.net/archives/86.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 03:08:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[指针类型转换]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=86</guid>
		<description><![CDATA[我们初始化一个指针或给一个指针赋值时，赋值号的左边是一个指针，赋 值号的右边是一个指针表达式。在我们前面所举的例子中，绝大多数情况下，指 针的类型和指针表达式的类型是一样的，指针所指向的类型和指针表达式所指向 的类型是一样的。 例十四： 1。 float f=12.3; 2。 float *fptr=&#38;f; 3。 int *p; 在上面的例子中，假如我们想让指针p指向实数f，应该怎么搞？是用下面的 语句吗？ p=&#38;f; 不对。因为指针p的类型是int*，它指向的类型是int。表达式&#38;f的结果是一 个指针，指针的类型是float*,它指向的类型是float。两者不一致，直接赋值的 方法是不行的。至少在我的MSVC++6.0上，对指针的赋值语句要求赋值号两边的类 型一致，所指向的类型也一致，其它的编译器上我没试过，大家可以试试。为了 实现我们的目的，需要进行“强制类型转换”： p=(int*)&#38;f; 如果有一个指针p，我们需要把它的类型和所指向的类型改为TYEP*和TYPE， 那么语法格式是： (TYPE*)p； 这样强制类型转换的结果是一个新指针，该新指针的类型是TYPE*，它指向的 类型是TYPE，它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都 没有被修改。一个函数如果使用了指针作为形参，那么在函数调用语句的实参和形参的结 合过程中，也会发生指针类型的转换。 例十五： void fun(char*); int a=125,b; fun((char*)&#38;a); &#8230; &#8230; 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的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗？在函数调用 语句中，实参&#38;a的结果是一个指针，它的类型是int *，它指向的类型是int。形 参这个指针的类型是char*，它指向的类型是char。这样，在实参和形参的结合过 程中，我们必须进行一次从int*类型到char*类型的转换。结合这个例子，我们可 以这样来想象编译器进行转换的过程：编译器先构造一个临时指针 char*temp， [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

