C语言中函数之间的清晰性

C语言中函数之间的清晰性,c,function,struct,C,Function,Struct,我理解函数的概念,但我想了解它们之间的更多区别。在C中使用函数似乎有4种变体: 需要参数且不返回值的 那些需要参数且确实返回值的 那些不需要参数且返回值的 那些不需要参数且不返回值的函数(我在BASH脚本中主要使用这些函数) 我知道他们都做了些什么,只是有点困惑。这主要与前3个有关(我得到的最后一个很简单) 程序员什么时候会使用前三个函数中的任何一个?我这里有两个函数使用结构,但不确定为什么它们是这样编写的: struct employee read_emp() {

我理解函数的概念,但我想了解它们之间的更多区别。在C中使用函数似乎有4种变体:

  • 需要参数且不返回值的
  • 那些需要参数且确实返回值的
  • 那些不需要参数且返回值的
  • 那些不需要参数且不返回值的函数(我在BASH脚本中主要使用这些函数)
  • 我知道他们都做了些什么,只是有点困惑。这主要与前3个有关(我得到的最后一个很简单)

    程序员什么时候会使用前三个函数中的任何一个?我这里有两个函数使用结构,但不确定为什么它们是这样编写的:

        struct employee read_emp()
        {
            struct employee    x;
    
            printf("Please enter the address: ");
            scanf("%s", &x.address);
    
            return x;
        }
    
    
        print_emp(struct employee y)
        {
            printf("Address is %s\n", y.address);
        }
    
    那就这样叫,

        main()
        {
            struct employee    emp1, emp2;
    
            emp1 = read_emp();
            print_emp(emp1);
        }
    
    因此,
    print\u emp()
    函数使用另一个函数作为参数,即
    read\u emp()
    函数。这让我有点困惑。第一个函数read\u amp()不接受任何参数,但在定义类型之前需要先定义类型:
    struct employee read\u emp()
    。然后初始化一个结构变量并返回一个值。现在,无论何时调用此函数,都不需要参数,我理解。调用函数返回的结果将是从键盘输入的结果。明白了

    但是,下面的函数在
    print\u emp()
    之前不接受任何类型定义,例如
    struct employee
    。也不初始化任何变量,也不需要返回值。但是,它接受一个参数作为结构变量声明。为什么不在
    read\u emp()

    read_emp()
    函数是列表中的一个函数示例,我将其称为数字#3
    print_emp()
    函数是列表中的一个函数示例,我将其称为数字#1

    列表编号#2中的函数似乎也不言自明:下面是一个我理解的示例:

    float average(int n1, int n2, int n3)
    {
       return (n1 + n2 + n3) / 3;
    }
    
    这很容易理解,因为它需要3个参数并返回一个值。因此,当我们在main()中调用它时,它看起来是这样的(假设main有另一个输入函数或部分,我们在其中读取用户键盘的3个数字:

    average(num1, num2, num3);
    

    我只是不明白为什么
    read\u emp()
    不带参数并返回值,而
    print\u emp()
    则相反,将结构变量的声明作为参数。为什么不
    read\u emp()呢
    也这样做吗?如果有任何帮助,我们将不胜感激。谢谢。

    参数用于将调用函数的程序部分的信息传递给函数。这通常是函数执行其任务所需的信息。返回值(其类型在函数名之前声明)用于将信息从函数传递到调用函数的程序部分;这通常是函数计算的结果


    大多数函数都具有参数和返回值;这些函数非常灵活,因为它们可以在不需要用户交互或向用户显示任何内容的情况下使用(但是,如果您确实希望向他们提供来自用户的信息或显示他们的结果,您可以在调用函数之前读取输入,或者在调用函数之后写入输出)。不接受参数的人将从程序外部(通过从键盘或文件读取输入)或全局变量获取信息(或者他们可能根本不需要信息,因为他们每次都做相同的事情)。那些没有返回值的人会将结果发送到程序外(通过将输出写入屏幕或文件)或者将其存储在全局变量中。

    作为旁注,将
    average
    函数中的
    3
    更改为
    3.0
    ,这样结果就不会向下舍入。查看标准库函数。了解如何使用这些函数来更好地了解函数的不同使用方式。感谢大家的评论。所有这些都非常有用因此,我的理解是,那些不接受参数的人将从程序外部获取信息,在这种情况下,从print_emp()获取信息函数正确吗?这似乎是真的。如果是这样,这是一个很好的解释。这对我来说更有意义。我确实看到printf从不返回值,因为它通常只输出到屏幕。但是你是说,如果它要输出到文件,那么也不需要“返回”函数的一部分,对吗?这有助于我理解它。read_emp()不接受任何参数,因为它稍后将被输入print_emp()函数,这是它获取“程序外信息”的方式。另外,我更清楚地了解print_emp是如何接受参数的(基本上是一个结构变量)read_emp()可以这样使用。read_emp()本身在print_emp()的struct employee参数中取代了“y”。@unixpipe:“那些不接受参数的人将从程序外部获取信息”通常是正确的,尽管这些函数也可以从全局变量获取信息。但是,
    print\u emp
    不是这样的函数,而
    read\u emp
    是这样的。
    print\u emp
    类似于
    printf
    ,因为它们的主要目的是从程序内部获取信息(通过参数)并将其呈现给用户。
    printf
    实际上返回打印的字符数,但我们通常不关心这些信息,而选择不将其存储在任何地方。@unixpipe:…事实上,输出到文件的函数可能不需要返回任何内容。但是,它不是函数
    read\u emp
    that被传递到
    print\u emp
    ——是
    read\u emp
    的结果存储在