C中函数之间的清晰度

时间:2015-02-27 04:35:24

标签: c function struct

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

  1. 需要参数且不返回值
  2. 的那些
  3. 需要参数且返回值
  4. 的那些
  5. 那些不需要参数并返回值
  6. 的那些
  7. 那些不需要参数但不返回值的那些(我在BASH脚本编写中主要使用了这些
  8. 我明白他们所做的一切只是有点困惑。它主要与前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_emp()函数用作参数,另一个函数是read_emp()函数。这让我很困惑。第一个函数read_amp()不接受任何参数,但在定义类型之前需要定义类型:struct employee read_emp()。然后初始化struct变量并返回一个值。现在每当我们调用这个函数时,都不需要参数,我明白了。调用函数返回的结果是结果,即从键盘输入的内容。得到了。

    但是,它下面的函数不会在struct employee之前采用任何类型定义,例如print_emp()。也没有初始化变量,也不需要返回值。但是,它将参数作为结构变量声明。为什么在这里,而不是在read_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_emp()不接受任何参数并返回一个值,而print_emp()则相反,并将参数作为结构变量的声明。为什么read_emp()也不会这样做?任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

参数用于将的信息从传递给调用函数的程序部分该函数。这通常是函数完成其工作所需的信息。返回值(其类型在函数名称之前声明)用于将的函数传递给函数调用该函数的程序部分;这通常是由函数计算的结果。

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