<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>评论：一道 C 语言指针访存题目的引申</title>
	<atom:link href="http://blog.linjian.org/articles/c-pointer-alignment-access/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.linjian.org/articles/c-pointer-alignment-access/</link>
	<description>有容乃大，无欲则刚</description>
	<lastBuildDate>Sun, 14 Mar 2010 09:43:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>来自：Jian Lin</title>
		<link>http://blog.linjian.org/articles/c-pointer-alignment-access/comment-page-1/#comment-1263</link>
		<dc:creator>Jian Lin</dc:creator>
		<pubDate>Mon, 16 Nov 2009 11:57:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.linjian.org/?p=406#comment-1263</guid>
		<description>@ tongyuan  你这是两个问题。有关内存布局，可以参考这个： http://jian.me/u/cmem.jpg
有关 m 和 n 的值，他们只是两个指针的数值表示，他们的值不可预测。程序变化、程序在不同机器上运行、在同一台计算机上多次运行都有可能出现不同的值。更有意义的值应该是 *(int*)m、*(int*)n，也就是 m、n 地址对应的内容。</description>
		<content:encoded><![CDATA[<p>@ tongyuan  你这是两个问题。有关内存布局，可以参考这个： <a href="http://jian.me/u/cmem.jpg" rel="nofollow">http://jian.me/u/cmem.jpg</a><br />
有关 m 和 n 的值，他们只是两个指针的数值表示，他们的值不可预测。程序变化、程序在不同机器上运行、在同一台计算机上多次运行都有可能出现不同的值。更有意义的值应该是 *(int*)m、*(int*)n，也就是 m、n 地址对应的内容。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：tongyuan</title>
		<link>http://blog.linjian.org/articles/c-pointer-alignment-access/comment-page-1/#comment-1262</link>
		<dc:creator>tongyuan</dc:creator>
		<pubDate>Mon, 16 Nov 2009 08:47:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.linjian.org/?p=406#comment-1262</guid>
		<description>然后这里修改了：
#include &quot;stdio.h&quot;
void main()
{
    int a[5]={1,2,3,4,5};
    
    int m=(int)(&amp;a);
    int n=(int)(&amp;a)+1;
    int *pa=(int)(&amp;a)+1;
    printf(&quot;%d %d %d&quot;,m,n,*pa);
}

学长能不能告诉我，m，n都代表了什么呢？
再测试，当注释 int *pa=(int)(&amp;a)+1;之后发现：m，n的值变化了！这是为什么呢？</description>
		<content:encoded><![CDATA[<p>然后这里修改了：<br />
#include "stdio.h"<br />
void main()<br />
{<br />
    int a[5]={1,2,3,4,5};</p>
<p>    int m=(int)(&amp;a);<br />
    int n=(int)(&amp;a)+1;<br />
    int *pa=(int)(&amp;a)+1;<br />
    printf("%d %d %d",m,n,*pa);<br />
}</p>
<p>学长能不能告诉我，m，n都代表了什么呢？<br />
再测试，当注释 int *pa=(int)(&amp;a)+1;之后发现：m，n的值变化了！这是为什么呢？</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：tongyuan</title>
		<link>http://blog.linjian.org/articles/c-pointer-alignment-access/comment-page-1/#comment-1261</link>
		<dc:creator>tongyuan</dc:creator>
		<pubDate>Mon, 16 Nov 2009 08:18:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.linjian.org/?p=406#comment-1261</guid>
		<description>经常来学长这里，学到不少东西
int main() 
{ 
    int a[5] = {1, 2, 3, 4, 5}; 
    int *pa = (int)(&amp;a) + 1; 
    printf(&quot;%x\n&quot;, *pa); 
    return 0; 
}
这里为什么要强制转换呢？我测试不强制转换，结果不一样？！
那么(int)(&amp;a) + 1又表示什么呢？
&amp;a+1不是指向数组a之外的某个地址吗？
还请学长解惑^_^</description>
		<content:encoded><![CDATA[<p>经常来学长这里，学到不少东西<br />
int main()<br />
{<br />
    int a[5] = {1, 2, 3, 4, 5};<br />
    int *pa = (int)(&amp;a) + 1;<br />
    printf("%x\n", *pa);<br />
    return 0;<br />
}<br />
这里为什么要强制转换呢？我测试不强制转换，结果不一样？！<br />
那么(int)(&amp;a) + 1又表示什么呢？<br />
&amp;a+1不是指向数组a之外的某个地址吗？<br />
还请学长解惑^_^</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：rhlei</title>
		<link>http://blog.linjian.org/articles/c-pointer-alignment-access/comment-page-1/#comment-1258</link>
		<dc:creator>rhlei</dc:creator>
		<pubDate>Sun, 15 Nov 2009 15:05:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.linjian.org/?p=406#comment-1258</guid>
		<description>我见到你了，认出来了。哈哈</description>
		<content:encoded><![CDATA[<p>我见到你了，认出来了。哈哈</p>
]]></content:encoded>
	</item>
</channel>
</rss>
