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};

image-20230622230438813

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