前天做题的时候,遇到二维数组的指针问题。
我在第一眼看到这道题,很明显的认为输出应该是0。很明显,我忽略了逗号表达式的用法,因为在我目前所学的情况下,逗号表达式并不常用,在以往强调的重点中,一直认为p[0]就是数组的第一个数字,所以a[0]是(0,1),而指向a[0]指针的p指向的位置就是a[0]的位置,P[0]就是a[0]的第一个位置,即就是0。
逗号表达式:多个表达式可以用逗号隔开,其中用逗号分开的表达式的值分别计算,但整个表达式的值是最后一个表达式的值。
所以a[0]=(0,1),但是(0,1)里面是逗号表达式,所以指向a[0]的指针p所指向的是1。
这是我遇到的第二个题目,语句1我很快可以得到答案,a1=8;
但是语句2算逗号表达式吗?我想了想,也认为是8,当然,答案错了,a2=4;
语句1中,a1=(++b,c--,d+3);a1=(3,7,8),这里需要注意++b和c--的区别,然后根据逗号表达式,a1=8;
语句2中,a2=++b,c--,d+3;a2=4,6,11,但是此刻后面的表达式没有小括号,也就是说,这不是逗号表达式,而是加了一个赋值的语句,逗号表达式的优先级最低,所以a2=4;