main() 的正确定义是什么? void main() 正确吗?

 新葡亰计算机网络     |      2020-03-22

这样的定义不正确

  1. 函数的概述
    一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。一个C程序可由一个主函数和若干个其他函数构成。

    函数的调用关系:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。如下图所示:

1、无参函数的定义形式
  类型标示符 函数名()
  {声明部分
  语句
  }
  2、有参函数定义的一般形式
  类型标示符 函数名 (形式参数列表)
  {声明部分
  语句
  }
  3、可以有“空函数”
  它的形式为
  类型说明符 函数名()
  { }
  例如:
  dummy(){}
  4、对形参的声明的传统方式
  在老版本c语言中,对形参类型的声明是放在函数定义的第二行,也就是不再第一行的括号内指定形参的类型,而在括号外单独指定,例如上面定义的max函数可以写成一下形式:
  int max (x,y)/*指定形参x,y*/
  int x,y;/*对形参指定类型*/
  {int z;
  z=x>y?x:y;
  return(z);
  }

![](https://upload-images.jianshu.io/upload_images/7108050-5cb944a3503bbfe4.png)

函数调用关系

 

//例1
/# include <stdio.h>
void main()
{
void printstar(); /对printstar函数声明/
void print_message(); /对print_message函数声明/
printstar(); /调用printstar函数/
print_message(); /调用print_message函数/
printstar(); /调用printstar函数/
}
void printstar() /定义printstar函数/
{
printf("* * * * * * * * * * * * * * * *n");
}

void print_message() /定义print_message函数/
{
printf("How do you do!n");
}
//输出:
/* * * * * * * * * * * * * * * *
How do you do!
/* * * * * * * * * * * * * * * *
(注:定义函数可以在主函数之前定义也可以在主函数之后定义,但是需要注意定义的顺序不同是有差异的。1)在主函数之前定义,则在主函数(或其他函数)调用该函数时不需要再声明,直接调用即可;2)在主函数之后定义,则在主函数(或其他函数)调用该函数时需要声明,再调用,否则会出错。(为了养成良好的书写习惯,在调用函数时都事先进行声明,再调用))

函数的相关说明:1)一个C程序有一个或多个程序模块组成,每个程序模块作为一个源程序文件。、对于较大的程序,一般是将其分割为若干个子程序模块。这样便于分别编写、分别编译,以提高调试效率。(一个源程序文件可以为多个C程序公用)
2)一个源程序文件由一个或多个函数以及其他有关内容(如命令行、数据定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为
单位进行编译的。
3)C程序的执行是从main函数开始的,如是在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。
4) 所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义(但是可以嵌套调用)。函数间可以互相调用,但不能调用main函数。main函数是系统调用的。
5)从用户使用的角度看,函数有两种:
(1)标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。应该说明,不同的C系统提供的库函数的数量和功能会有一些不同,当然许多基本的函数是共同的。
(2)用户自己定义的函数。用以解决用户的专门需要。
6)从函数的形式看,函数分两类:
(1)无参函数。如例1中的printstar()和print_message()就是无参函数。在调用无参函数时,主调函数不向被调用函数传递数据。无参函数一般用来执行指定的一组操作。例如,例1程序中的printstar函数。
(2)有参函数。在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据,一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。 如例2

//例2
/#include<stdio.h>
int max(int x, int y) /* 这里就是在函数被调用时传入参数x,y /
{
int z;
z = x > y ? x : y;
return z; //
该函数执行结束后返回z的值 */
}

void main()
{
int max(int x, int y);
int i, j, k;
printf("Please input two numbers: ");
scanf("%d%d", &i, &j);
k = max(i, j);
printf("The maximum number is: %dn", k);
}
//Please input two numbers: 15 16
The maximum number is: 16

  1. 函数定义的一般形式
    定义无参函数的一般形式:
    类型标识符 函数名() /* 这里的类型标识符即为返回值的类型 /
    {
    声明部分
    语句部分
    }
    定义有参函数的一般形式:
    类型标识符 函数名(形式参数列表) /
    这里的类型标识符即为返回值的类型 */
    {
    声明部分
    语句部分
    }
    定义控函数的一般形式:(注:空函数被调用时什么也不做,其目的是为以后扩展程序功能做准备)
    类型标识符 函数名()
    {

    }

  2. 函数的参数和函数的值
    形参(形式参数):在定义有参函数时,函数名后面括号中的变量名称即为“形式参数”。(注:形参不占内存,只有当调用该函数时,传入实参才开辟内存空间)(注2:在定义形参时需要声明其数据类型,如果没有声明则系统默认为int型。)
    实参(实际参数):在主函数调用一个函数时,函数名后面括弧中的参数(也可以是一个表达式)称为“实际参数”。(注:实参是占内存的)
    在多数情况下,主调函数和被调函数之间室友数据传递关系的。(在不同的函数之间传递数据可以使用:1)参数:通过形参和实参;2)返回值:函数通过return返回计算结果给调用它的函数;3)全局变量)

    形参与实参的说明:
    1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数max(int x, int y)中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。
    2)实参可以是常量、变量或表达式,如:max(3,a+b); 但要求它们有确定的值。在调用时将实参的值赋给形参。
    3)在被定义的函数中,必须指定形参的类型。(注:如果没有制定类型,编译器会warning,但是默认该形参为int型。为了养成良好的书写习惯应该指定形参类型。)
    4)实参与形参的类型应相同或赋值兼容。(如果形参与实参类型不同,则系统自动将实参转换为形参的数据类型。)见例3

//例3
/#include<stdio.h>
int max(int x, int y)
{
int z;
z = x > y ? x : y;
printf("The max number is: %d n", z);
return z;
}
void main()
{
float i = 15.5, j = 16.5;
printf("The maximum number is: %dn", max(i, j));
}
//输出: The max number is: 16
The maximum number is: 16

5)在C语言中,实参向对形参的数据传递是“值传递”(相当于COPY),单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数的实参的值。例如,若在执行函数过程中x和y的值变为10和15,而a和b仍为2和3。

图片 1

值传递

函数的返回值:通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。、
    1)函数的返回值是通过函数中的return语句获得的:return语句将被调用函数中的一个确定值带回主调函数中去。(需要返回值则return,不需要则不用)(一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。)
    2)函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型。
    3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。(如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。)
    4)对于不带回值的函数,应当用“void”定义函数为“无类型”(或称“空类型”)。(这样,系统就保证不使函数带回任何值,即禁止在调用函数中使用被调用函数的返回值。此时在函数体中不得出现return语句。)
  1. 函数的调用
    • 函数调用一般形式:函数名(实参列表)(注:调用无参函数,则括号为空;如果实参列表包含多个实参,则各参数间用逗号隔开。实参与形参的个数应该相等,类型应匹配。(对实参列表中实参的求值顺序并不是确定的,有的编译器按照自左向右的顺序,有的按照自右向左的顺序。
    ![](https://upload-images.jianshu.io/upload_images/7108050-37f6b36120559da5.png)

    函数调用中,实参列表的的求值顺序
上一篇:给图片加阴影效果的CSS 下一篇:没有了