這段程式的執行結果是什麼?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]=;和.int a[3][2]=;是完全等價的......
但是...那個逗號是怎麼回事呢!?
說到這裡,就不得不提到乙個很容易被我們忽視的運算子「,」了。它叫做逗號運算子,又名順序求值運算子,在所有的運算子中優先順序是最低的(第15級)。由逗號運算子構成的表示式也叫逗號表示式(順序表示式),形式為
表示式1,表示式2,……,表示式 n
在使用的時候,按順序依次求出表示式1,2,3,......,n的值並取表示式n的值作為整個逗號表示式的值。
看完了這裡想必大家也就明白了為何習題4的結果是1不是0了吧,實際上
也可以寫為int a[3][2]=;
僅僅對a[0][0],a[0][1],a[1][0]分別賦值了1,3,5,其餘元素值為0。所以輸出a[0][0]的值當然就是1咯~
另附一道思考題:
main()
上述程式的輸出結果是:
正確答案應該是2,3,1
逗號表示式
c語言提供一種特殊的運算子 逗號運算子。用它將兩個表示式連線起來。如 3 5,6 8 稱為逗號表示式,又稱為 順序求值運算子 逗號表示式的一般形式為 表示式1,表示式2 逗號表示式的求解過程是 先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式 3 5,6 8 ...
逗號表示式
c語言提供一種特殊的運算子 逗號運算子。用它將兩個表示式連線起來。如 3 5,6 8 稱為逗號表示式,又稱為 順序求值運算子 逗號表示式的一般形式為 表示式1,表示式2 逗號表示式的求解過程是 先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式 3 5,6 8 ...
逗號表示式
define a b,c 表示式1,表示式2,表示式3,表示式n 逗號表示式的要領 1 逗號表示式的運算過程為 從左往右逐個計算表示式。2 逗號表示式作為乙個整體,它的值為最後乙個表示式 也即表示式n 的值。3 逗號運算子的優先級別在所有運算子中最低。c語言提供一種特殊的運算子,逗號運算子,優先級別...