使用逗号运算符将值传递给函数?

时间:2017-03-13 23:34:48

标签: c

我正在学习C编程语言,目前我正在探索逗号运算符。我觉得我正慢慢地围绕着这个操作员。我在这里找到了关于这个运算符的一个很好的讨论:

What does the comma operator , do?

我还找到了几个关于如何使用此运算符的示例:

#include<stdio.h>
int main()
{
   int i;
   i = (1,2,3);
   printf("i:%d\n",i);
   return 0;
}

#include<stdio.h>
void main() 
{
   int num1 = 1, num2 = 2;
   int res;
   res = (num1, num2);
   printf("%d", res);
}

但是,我最近遇到了一个不相关的例子,其中作者碰巧使用了逗号运算符,我对如何在示例中使用它感到困惑。

#include <stdio.h>
#include <stdlib.h>

struct date
{
    int month;
    int day;
    int year;   
};

struct date foo(struct date x)
{
    ++x.day;    
    return x;
}

int main(void)
{
    struct date today = {10, 11, 2004};
    struct date *newDate, foo();    // comma operator?
    return 0;   
}

让我失望的是,在逗号运算符之后,似乎正在调用foo()函数;但是,foo()函数声明为一个参数,特别是struct date。如何在没有任何参数的情况下调用此函数以及逗号运算符如何适合此示例?逗号运算符是否以某种方式将newDate指针传递给foo()?任何见解将不胜感激。欢呼声。

1 个答案:

答案 0 :(得分:3)

该行中没有涉及逗号运算符:

struct date *newDate, foo();

它只是将newDate声明为指向struct datefoo的指针作为返回struct date的函数,它不指定其参数(K&amp; R旧式函数声明)

逗号在此上下文中用作 punctuator

一般情绪是在文件范围内对函数声明进行分组,不要将它们与对象的声明混合在一起。