﻿<?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++博客-wally-ye</title><link>http://www.cppblog.com/wally-ye/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:09:15 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:09:15 GMT</pubDate><ttl>60</ttl><item><title>运算符优先级</title><link>http://www.cppblog.com/wally-ye/archive/2011/04/12/143995.html</link><dc:creator>wally_ye</dc:creator><author>wally_ye</author><pubDate>Mon, 11 Apr 2011 18:23:00 GMT</pubDate><guid>http://www.cppblog.com/wally-ye/archive/2011/04/12/143995.html</guid><wfw:comment>http://www.cppblog.com/wally-ye/comments/143995.html</wfw:comment><comments>http://www.cppblog.com/wally-ye/archive/2011/04/12/143995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wally-ye/comments/commentRss/143995.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wally-ye/services/trackbacks/143995.html</trackback:ping><description><![CDATA[<p>拾起一下被我忽视的东西！<br>　c语言的操作符共有15个优先级，如下： </p>
<div class=spctrl></div>
<p>　　Operators Associativity </p>
<div class=spctrl></div>
<p>　　------------------------------------------------------------------ </p>
<div class=spctrl></div>
<p>　　运算符 结合性 </p>
<div class=spctrl></div>
<p>　　------------------------------------------------------------------ </p>
<div class=spctrl></div>
<p>　　() [] -&gt; . left to right </p>
<div class=spctrl></div>
<p>　　! ~ ++ -- + - * (type) sizeof right to left </p>
<div class=spctrl></div>
<p>　　* / % left to right </p>
<div class=spctrl></div>
<p>　　+ - left to right </p>
<div class=spctrl></div>
<p>　　&lt;&lt; &gt;&gt; left to right </p>
<div class=spctrl></div>
<p>　　&lt; &lt;= &gt; &gt;= left to right </p>
<div class=spctrl></div>
<p>　　== != left to right </p>
<div class=spctrl></div>
<p>　　&amp; left to right </p>
<div class=spctrl></div>
<p>　　^ left to right </p>
<div class=spctrl></div>
<p>　　| left to right </p>
<div class=spctrl></div>
<p>　　&amp;&amp; left to right </p>
<div class=spctrl></div>
<p>　　|| left to right </p>
<div class=spctrl></div>
<p>　　?: right to left </p>
<div class=spctrl></div>
<p>　　= += -= *= /= %= &amp;= ^= |= &lt;&lt;= &gt;&gt;= right to left </p>
<div class=spctrl></div>
<p>　　, left to right </p>
<div class=bpctrl></div>
<h2 class="headline-1 bk-sidecatalog-title"><span class="text_edit editable-title" data-edit-id="262524:262524:2"><a class=nslog:1019 onclick='bk.view.editLemma("/edit/",262524,262524,2);return false' href="http://baike.baidu.com/view/262524.htm#"><u><font color=#800080>编辑本段</font></u></a></span><a name=2></a><span class=headline-content>三个优先级</span></h2>
<p>　　优先级从上到下依次递减，最上面具有最高的优先级，逗号操作符具有最低的优先级。 </p>
<div class=spctrl></div>
<p>　　所有的优先级中，只有三个优先级是从右至左结合的，它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。 </p>
<div class=spctrl></div>
<p>　　具有最高优先级的其实并不算是真正的运算符，它们算是一类特殊的操作。()是与函数相关，[]与数组相关，而－&gt;及.是取结构成员。 </p>
<div class=spctrl></div>
<p>　　其次是单目运算符，所有的单目运算符具有相同的优先级，因此在我认为的 真正的运算符中它们具有最高的优先级，又由于它们都是从右至左结合的，因此*p++与*(p++)等效是毫无疑问的。 </p>
<div class=bpctrl></div>
<h2 class="headline-1 bk-sidecatalog-title"><span class="text_edit editable-title" data-edit-id="262524:262524:3"><a class=nslog:1019 onclick='bk.view.editLemma("/edit/",262524,262524,3);return false' href="http://baike.baidu.com/view/262524.htm#"><u><font color=#800080>编辑本段</font></u></a></span><a name=3></a><span class=headline-content>算术运算符</span></h2>
<p>　　接下来是算术运算符，*、/、%的优先级当然比+、－高了。 </p>
<div class=spctrl></div>
<p>　　移位运算符紧随其后。 </p>
<div class=spctrl></div>
<p>　　其次的关系运算符中，&lt; &lt;= &gt; &gt;=要比 == !=高一个级别，不大好理解。 </p>
<div class=spctrl></div>
<p>　　所有的逻辑操作符都具有不同的优先级（单目运算符除外，！和~） </p>
<div class=spctrl></div>
<p>　　逻辑位操作符的"与"比"或"高，而"异或"则在它们之间。 </p>
<div class=spctrl></div>
<p>　　跟在其后的&amp;&amp;比||高。 </p>
<div class=spctrl></div>
<p>　　接下来的是条件运算符，赋值运算符及逗号运算符。 </p>
<div class=spctrl></div>
<p>　　在C语言中，只有4个运算符规定了运算方向，它们是&amp;&amp;、| |、条件运算符及赋值运算符。 </p>
<div class=spctrl></div>
<p>　　&amp;&amp;、| |都是先计算左边表达式的值，当左边表达式的值能确定整个表达式的值时，就不再计算右边表达式的值。如 a = 0 &amp;&amp; b; &amp;&amp;运算符的左边位0，则右边表达式b就不再判断。 </p>
<div class=spctrl></div>
<p>　　在条件运算符中。如a?b:c；先判断a的值，再根据a的值对b或c之中的一个进行求值。 </p>
<div class=spctrl></div>
<p>　　赋值表达式则规定先对右边的表达式求值，因此使 a = b = c = 6;成为可能。</p>
<img src ="http://www.cppblog.com/wally-ye/aggbug/143995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wally-ye/" target="_blank">wally_ye</a> 2011-04-12 02:23 <a href="http://www.cppblog.com/wally-ye/archive/2011/04/12/143995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>main函数参数的用法</title><link>http://www.cppblog.com/wally-ye/archive/2011/04/07/143573.html</link><dc:creator>wally_ye</dc:creator><author>wally_ye</author><pubDate>Wed, 06 Apr 2011 17:31:00 GMT</pubDate><guid>http://www.cppblog.com/wally-ye/archive/2011/04/07/143573.html</guid><wfw:comment>http://www.cppblog.com/wally-ye/comments/143573.html</wfw:comment><comments>http://www.cppblog.com/wally-ye/archive/2011/04/07/143573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wally-ye/comments/commentRss/143573.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wally-ye/services/trackbacks/143573.html</trackback:ping><description><![CDATA[<div id="appShareTitle">
<script type="text/javascript">
share_info.allow_share = 1
</script>
main函数参数的用法 </div>
<div id="app-share-container">
<div id="app-share-content">
<p>main函数的声明<br>int main(int argc, char **argv)<br>或者<br>int main(int argc, char
*argv[])<br>依据《C程序设计语言（第二版.新版）》的讲述：<br>第一个参数（习惯上称为argc，用于参数计数）的值表示运行程序时，命令行中参数的数目；<br>第二个参数（称为argv，用于参数的向量）是一个指向字符串数组的指针，其中每个字符串对应一个参数。</p>
<p>例子是在命令行模式下，在命令提示符$后输入：<br>$ echo hello,world<br>则会显示：<br>hello,world<br>$
(提示符，等待输入命令）</p>
<p>下面用C语言实现这个echo的程序：</p>
<p>//使用书中的第一个版本程序，文件名保存为 echo.c<br>#include &lt;stdio.h&gt;<br>/* echo
command-line arguments; 1st version */<br>int main(int argc, char
*argv[])<br>{<br>&nbsp;&nbsp; int i;<br>&nbsp;&nbsp; for (i = 1; i &lt; argc; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf("%s%s", argv[i], (i &lt; argc-1) ? " " : "");<br>&nbsp;&nbsp; printf("\n");<br>&nbsp;&nbsp;
return 0;<br>}<br>//编译，运行，结果什么也没有。</p>
<pre>令行参数，进入到编译后产生可执行 echo 文件的目录，然后在命令提示符后输入：<br>$ ./echo hello,world<br>程序就会运行出来结果：<br>hello,word<br>$ (提示符，等待输入命令）</pre>
<p>C语言约定：argv[0]的值是启动该程序的程序名，因此argc的值至少为1。<br>如果argc的值是1，说明程序名后面没有命令行参数。</p>
<p>《Linux高级程序设计（第二版）》中也有一个简单的main函数的例子。<br>//factorial.c的源程序<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>int
factorial(int n)<br>{<br>&nbsp;&nbsp; if(n&lt;=1)<br>return 1;<br>&nbsp;&nbsp; else<br>return
factorial(n-1)*n;//函数的经典递归调用<br>}<br>编译，生成factorial.o<br>//main.c源程序<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>int
factorial(int n);<br>int main(int argc, char **argv)&nbsp;&nbsp; //使用带参数的main函数<br>{<br>&nbsp;&nbsp;
int n;<br>&nbsp;&nbsp; if(argc&lt;2)//如果argc的值是1，说明程序名后面没有命令行参数<br>{<br>&nbsp;&nbsp;&nbsp;
printf("Usage:%s\n",argv[0]);<br>&nbsp;&nbsp;&nbsp; //argv[0]的值是启动该程序的程序名 <br>&nbsp;&nbsp;&nbsp; return
-1;<br>}<br>&nbsp;&nbsp; else<br>{<br>&nbsp;&nbsp;&nbsp;
n=atoi(argv[1]);//argv[1]读取的是第一个参数，atoi将数字字符转化为数字<br>&nbsp;&nbsp;&nbsp; printf("Factorial of %d
is %d .\n",n,factorial(n));<br>}<br>&nbsp;&nbsp; return 0;<br>}<br>编译生成
main.o<br>然后在命令行将main.o 和factorial.o连接生成 factorial可执行程序，并测试带参数和不带参数执行：<br>$ gcc
-o factorial main.o factorial.o //连接成可执行程序factorial<br>$ ./factorial&nbsp;&nbsp;&nbsp;&nbsp;
//不带参数执行factorial<br>Usage:./factorial&nbsp;&nbsp;&nbsp; //结果返回输入的执行程序名<br>$ ./factorial 3&nbsp;&nbsp;&nbsp;&nbsp;
//带参数执行factorial，参数是3<br>Factorial of 3 is 6 .&nbsp;&nbsp;&nbsp;
//参数3被带到函数中，并执行函数操作，返回正确的值<br>$ ./factorial 3 4 5&nbsp;&nbsp;&nbsp;
//带参数执行factorial，参数3、4和5<br>Factorial of 3 is 6 .&nbsp;&nbsp;&nbsp;
//结果只执行第一个参数（函数中只调用第一个参数），其他参数忽略<br>$ (提示符，等待输入命令）</p>
<p>将它们转化为一个函数，在Windows下面试试：<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>int
factorial(int n)<br>{<br>&nbsp;&nbsp; if(n&lt;=1)<br>return 1;<br>&nbsp;&nbsp; else<br>return
factorial(n-1)*n;//函数的经典递归调用<br>}<br>int main(int argc, char **argv)&nbsp;&nbsp;
//使用带参数的main函数<br>{<br>&nbsp;&nbsp; int n;<br>&nbsp;&nbsp;
if(argc&lt;2)//如果argc的值是1，说明程序名后面没有命令行参数<br>{<br>&nbsp;&nbsp;&nbsp;
printf("Usage:%s\n",argv[0]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //argv[0]的值是启动该程序的程序名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();
<br>&nbsp;&nbsp;&nbsp; return -1;<br>}<br>&nbsp;&nbsp; else<br>{<br>&nbsp;&nbsp;&nbsp;
n=atoi(argv[1]);//argv[1]读取的是第一个参数，<br>&nbsp;&nbsp;&nbsp; //atoi将数字字符转化为数字<br>&nbsp;&nbsp;&nbsp;
printf("Factorial of %d is %d .\n",n,factorial(n));<br>}<br>getch();<br>&nbsp;&nbsp;
return
0;<br>}<br>编译，连接，生成factorial.exe<br>进入生成目录，在DOS命令行执行：<br>&gt;factorial.exe<br>Usage:factorial.exe</p>
<p>&gt;factorial.exe 3<br>Factorial of 3 is 6.</p>
<p>&gt;factorial.exe 4 5 6<br>Factorial of 4 is 24.</p>
<p>&gt;(提示符，等待输入命令)<br>我们再修改一下这个程序，让它读取所有输入的参数<br>//文件名修改为
fac.c<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>int
factorial(int n)<br>{<br>&nbsp;&nbsp; if(n&lt;=1)<br>return 1;<br>&nbsp;&nbsp; else<br>return
factorial(n-1)*n;//函数的经典递归调用<br>}<br>int main(int argc, char **argv)&nbsp;&nbsp;
//使用带参数的main函数<br>{<br>&nbsp;&nbsp; int n;<br>&nbsp;&nbsp; int i;//加入循环控制变量<br>&nbsp;&nbsp;
if(argc&lt;2)//如果argc的值是1，说明程序名后面没有命令行参数<br>{<br>&nbsp;&nbsp;&nbsp;
printf("Usage:%s\n",argv[0]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //argv[0]的值是启动该程序的程序名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();
<br>&nbsp;&nbsp;&nbsp; return -1;<br>}<br>&nbsp;&nbsp; else<br>for(i=1;i&lt;=argc;i++)<br>{<br>&nbsp;&nbsp;&nbsp;
n=atoi(argv[i]);//argv[i]读取的是第i个参数，<br>&nbsp;&nbsp;&nbsp; //atoi将数字字符转化为数字<br>&nbsp;&nbsp;&nbsp;
printf("Factorial of %d is %d .\n",n,factorial(n));<br>}<br>getch();<br>&nbsp;&nbsp;
return
0;<br>}<br>编译，连接后生成fac.exe<br>再到命令行下进行测试：<br>&gt;fac.exe<br>Usage:fac.exe</p>
<p>&gt;fac.exe 3<br>Factorial of 3 is 6.<br>Factorial of 0 is 1.</p>
<p>&gt;fac.exe 4 5 6<br>Factorial of 4 is 24.<br>Factorial of 5 is
120.<br>Factorial of 6 is 720.<br>Factorial of 0 is 1.</p>
<p>&gt;(提示符，等待输入命令)<br>多出来一个<br>Factorial of 0 is
1.<br>原来是这里，多循环了一次，<br>for(i=1;i&lt;=argc;i++)<br>修改为<br>for(i=1;i&lt;argc;i++)<br>再试验一次（记得重启CMD，不然还是载入原来的程序）：<br>&gt;fac.exe<br>Usage:fac.exe</p>
<p>&gt;fac.exe 3<br>Factorial of 3 is 6.</p>
<p>&gt;fac.exe 4 5 6<br>Factorial of 4 is 24.<br>Factorial of 5 is
120.<br>Factorial of 6 is 720.</p>
<p>&gt;(提示符，等待输入命令)</p>
</div>
</div><img src ="http://www.cppblog.com/wally-ye/aggbug/143573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wally-ye/" target="_blank">wally_ye</a> 2011-04-07 01:31 <a href="http://www.cppblog.com/wally-ye/archive/2011/04/07/143573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>