C语言( , )运算符
今天做一道笔试题的时候碰到了( , )的题,最开始还没注意到,然后发现做错了,就仔细看了一下题目,发现他使用的是括号,但是又感觉平时没有碰到过,所以就记录一下。
题目如下
#include <stdio.h>
int main (int argc, char *argv[])
{
int a[ ][2] = {(1,2),(3,4),(5,6)};
int *p = a[0];
printf("%d\n",p[0]);
printf("%d\n", p[1]);
printf("%d\n", sizeof(a));
return 0;
}
输出结果,我最开始没有注意到这个里面用的小括号,于是,我就回答的是1,3,24,错的离谱
然后一运行发现结果是2 4 16.
不理解,然后就问了chatGPT,回答如下
在 C 语言中,
(x, y)表示一个逗号运算符(,)。逗号运算符有两个操作数,它首先对左操作数x进行求值(并丢弃结果),然后对右操作数y进行求值,并返回该值。举个例子,假设你有这样的表达式
(x=3, y=2),则该表达式的结果为2,因为y=2是逗号运算符的右操作数。逗号运算符常用于
for循环中,允许在一个语句中执行多个操作。例如,你可以写出如下的for循环:for (i = 0, j = 0; i < n; i++, j++) // loop body这里,初始化和迭代部分都使用了逗号运算符,以同时对两个变量进行操作。
总结就是(,)这个是一个运算符,他会返回逗号右侧的值,所以题目中(1,2)结果是2,(3,4)结果是4…
所以int a[ ][2] = {(1,2),(3,4),(5,6)};里面实际存放的是int a[ ][2] = {2,4,6};

三个元素,又因为规定了列数是2,所以会自动补齐[1][1]元素,所以sizeof(a)的结果是16