程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 逗號表達式,逗號

逗號表達式,逗號

編輯:關於C語言

逗號表達式,逗號


這段程序的運行結果是什麼?0麼?請看下面的截圖
 
沒錯,不是0,是1!
你可能會懷疑:為什麼是1不是0?暫且我們不談這個。
p=a[0]=&a[0][0]這個想必大家都知道,於是p[0]也就代表著*(p+0)也就是*(&a[0][0]),由*與&互為逆運算可知p[0]就是a[0][0]。
那麼問題來了!a[0][0]是什麼?
很多人可能會以為a[0][0]是0,實則不然。在下圖這種情況下
 a[0][0]的確是0,細心觀察可以發現兩端代碼之間的微小差異,沒錯,就是()與{ }的差別。
我們在初始化二維數組的時候 ,對同一行的元素都用{ }進行聚合,{ }的作用是劃分區域,每個{ }內為一行的元素,此外  { }並不是運算符。而()為優先級一級的運算符,但並不能在初始化二維數組的時候劃分每行元素。That is to say...int a[3][2]={(0),(1),(2)};和.int a[3][2]={0,1,2};是完全等價的......
但是...那個逗號是怎麼回事呢!?
說到這裡,就不得不提到一個很容易被我們忽視的運算符“,”了。它叫做逗號運算符,又名順序求值運算符,在所有的運算符中優先級是最低的(第15級)。由逗號運算符構成的表達式也叫逗號表達式(順序表達式),形式為
表達式1,表達式2,……,表達式 n
在使用的時候,按順序依次求出表達式1,2,3,......,n的值並取表達式n的值作為整個逗號表達式的值。

看完了這裡想必大家也就明白了為何習題4的結果是1不是0了吧,實際上
也可以寫為int a[3][2]={1,3,5};
僅僅對a[0][0],a[0][1],a[1][0]分別賦值了1,3,5,其余元素值為0。所以輸出a[0][0]的值當然就是1咯~

另附一道思考題:

main() { int x,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x,y,z);



上述程序的輸出結果是:

正確答案應該是2,3,1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved