﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-龙与地下城的世界-随笔分类-C/C++语言</title><link>http://www.cppblog.com/SysProgrammer/category/10105.html</link><description>Memory Layout......</description><language>zh-cn</language><lastBuildDate>Thu, 24 Dec 2009 02:51:38 GMT</lastBuildDate><pubDate>Thu, 24 Dec 2009 02:51:38 GMT</pubDate><ttl>60</ttl><item><title>关于C中数组名</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/04/04/78951.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Sat, 04 Apr 2009 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/04/04/78951.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/78951.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/04/04/78951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/78951.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/78951.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: Comic Sans MS">&nbsp;&nbsp;&nbsp;大半年没写了，说实在的我个人认为C++博客是最好的技术博客之一，我一直非常喜欢它，所以只要有时间，一定要写一些在上面。<br>&nbsp;&nbsp; 感悟最深的就是，好容易花数个小时搞出来的东西，过段时间竟然忘记了，或者是记忆也变得模糊了，很是心痛啊！记录下来，就不会有这种倒霉事了 :&lt;<br>&nbsp;&nbsp;&nbsp;言归正传，已经好像是在读《C专家编程》时，见到过说数组名是个很&#8220;奇特&#8221;的指针，某种意义上说，它不能称为指针，因为它只能作为右值出现，当时也比较迷惑，很偶然，今天在读《Unix环境高级编程》时，写一个打印出进程的环境变量表的小玩意，要用到environ这个全局指针，它就是个指针数组的名字，该数组每个元素为一个字符串，以'\0'结尾，数组最后一个元素为NULL，开始先把该数组的首地址拷贝给了另一个指针，char **pp = environ; 然后为了偏移到下一个字符串，我竟然低级的写了++environ，编译报错说: ISO C++ forbid to use a non-refernece type as a lvalue! 顿时想到environ是一个数组名，不能作为一个左值使用。于是又想到了如果int *ia1[]; int *ia2[]，当写ia1 = ia2时会出现同样的错，这就是因为ia1 ia2都为右值，任何一个不能出现在=号的左边充当左值！<br><br>代码1：<br>char *sz[] = { "aaa", "bbb", "ccc", 0 };<br>&nbsp;int i = 0;<br>&nbsp;while (sz[i] != 0)<br>&nbsp;{<br>&nbsp;&nbsp;char *p = sz[i];<br>&nbsp;&nbsp;printf("%s\n", p);<br>&nbsp;&nbsp;++i;<br>&nbsp;}<br><br>代码2: Unix系统上打印一个进程的环境变量表<br>char **pp = environ;</p>
<p style="FONT-FAMILY: Comic Sans MS">&nbsp;while (*pp != 0) {<br>&nbsp;&nbsp;printf("%s\n", *pp);<br>&nbsp;&nbsp;++pp;<br>&nbsp;}<br><br>少的可怜，1个小时浪费了....<br></p>
<img src ="http://www.cppblog.com/SysProgrammer/aggbug/78951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-04-04 16:45 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/04/04/78951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>