函数~原型~声明~~

@[toc]

目录

#  函数原型

#函数的定义

#带形式参数的函数

#定义

#声明

#调用

#局部变量,全局变量


先来看一段代码。要求:创建一个在一行打印10个-的函数,并使用它。

#include<stdio.h>
#define width 15
void lel (void) ;//函数原型
int main()
{
   lel();//函数调用
   printf("他的名字是Jack.\n");
   lel();
   return 0;
}
void lel (void)//定义函数
{
  int i;
  for(i=0;i<width;i++)
    printf("-");
  printf("\n");
}
/*运行结果
---------------
他的名字是Jack.
---------------*/

  

#  函数原型

1.()表明lel是一个函数。

2.第一个void是函数类型,void类型表明函数没有返回值。第二个void表明函数不带参数。

3.表明这是在声明函数,不是定义函数。

4.函数原型(声明),告诉编译器在别处查找函数的定义。函数原型也可放在main()里面或其他位置,在首次调用该函数之前的位置都可以。

#函数调用

当计算机执行到lel();语句时会找到函数定义并执行其内容,执行完lel()中的内容后,计算机会返回main()执行下一条语句。

再来看一段代码。要求:创建一个在一行打印一定数量-的函数,使用函数参数传递-的数量。

#include <stdio.h>
void lel (char ch,int i);
int main()
{
  lel('-',10);
  printf("\n");
  printf("He is Jack.\n");
  lel('-',16);
  printf("\n");
  return 0;
}

void lel(char ch,int i)
{
  int j;
  for(j=0;j<i;j++)
 {
   printf("%c",ch);
 }
}  /*运行结果:----------
              He is Jack.
              ----------------

 */ 

#函数的定义

1.函数的定义形式

//函数头

#include <stdio.h> //预处理指令

#define width15 //预处理指令

void lel (void) //函数名

//函数体

{

  int i;      //声明

  for(i=0;i<width;i++)  //循环语句

     printf("-");            //函数表达式语句

  printf("\n");             //函数表达式语句

(1)函数头中的lel()后面没有分号,让编译器明白这是定义lel(),而不是调用函数或声明函数原型。

(2)lel()函数中的变量i是局部变量,该变量只属于lel()函数。在程序中其他地方使用该变量,不会引起名称冲突,它们是同名的不同变量。

#带形式参数的函数

#定义

void lel (char ch,int i)//ANSI C风格函数头

     告诉编译器lel()使用两个参数ch和i,ch是char类型,i是int类型。

      i 和ch这两个变量被称为形式参数,形式参数也是局部变量,只属于lel()。每次调用函数,就会给这样的变量赋值。

     ANSI C(美国国家标准协会及国际标准化组织推出的关于C语言的标准)要求在每个变量前都声明其类型。

void  lek (int a,b)//无效函数头

void  lek(int a,int b)//有效函数头

      ANSI C之前的形式(ANSI C也接受,但在逐渐淘汰):

void lel (ch,i)//圆括号中只有参数名)

char ch;//在函数左花括号之前声明

int i;

void lex (a,b,c)

int a,b,c;//变量是同一类型,可用逗号分隔变量名 

#声明

     void lel (char ch,int i); //ANSI C形式 

     可省略变量名 :

void lel (char,int);//在原型中使用变量名并没有实际创建变量,仅表示一个##类型的变量

      ANSI C也接受过去声明函数的形式:

void lel ();//圆括号中没有参数列表 

#调用

     实际参数是出现在函数调用圆括号中的表达式,形式参数是函数定义的函数头中声明的变量。

     实际参数,提供ch和i的值。

lel ('a',10);//实际参数是a和12,这两个值被赋给lel()中相应的形式参数char和int 

      形式参数是被调函数(lel())中的变量,实际参数是主调函数(main())赋给被调函数的具体值。

      实际参数可以是常量,变量或表达式,实际参数最终被求得的值(实际参数是具体的值)要被拷贝给被调函数相应的形式参数。

      无论被调函数对拷贝函数进行什么操作,都不会影响主调函数中的原始数据。

      C语言中的一切函数调用中,实参传递给形参的机理都是“按值传递”。如果要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。

#局部变量,全局变量

      局部变量:作用在一定区域内,才能被使用的变量,出了自己的作用域就会被释放掉。(同名变量,在各自函数体内互不影响)。

      全局变量:从定义开始往下,所有的地方都可以使用,在程序结束时被释放。若没有对全局变量进行赋值,系统自动默认为0。

      局部变量与全局变量可以同名,使用时(程序从上往下执行)“就近原则”。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值