C语言基础(四)- 函数

KinglyJn      2013-02-26

什么叫做函数? –(结合数据结构和面向对象的语言才能理解的更深刻)

  • 逻辑上:能够完成特定功能的独立的代码单元
  • 物理上:能够接收数据【当也可以不接受】,能够对接收的数据处理【当然也可以不处理】,能够将数据处理的结果返回【当然也可以不返回任何值】的功能代码;
  • 总结:函数是个工具,他是为了解决大量类似问题而设计的,函数可以被当做一个黑匣子(外部有接口,内部结构未知(机密哦?!))

为什么需要函数?

  1. 对于不同的数据,对其操作是相同的,这时候就用到了函数;
  2. 函数是一个工具,他不是为某一个程序代码设计的,而是为解决大量同类型的数据而设计的;通过使用函数,可以避免写大量繁琐 重复代码;
  3. 有利于程序模块化(比如一个问题的解决main分三步,这三步又可逐渐细化),
  4. C语言的基本单位是函数,每一个模块需要一个函数来实现;

函数的分类

  • 有参函数和无参函数
  • 有返回值和无返回值
  • 库函数和用户自定义函数
  • 值传递函数和地址传递函数
  • 普通函数和主函数(一个程序必须有且只有一个主函数,普通函数可以调用主函数,但普通函数不能调用主函数,普通函数之间可以相互调用;主函数和普通函数变量名相互独立,可以相同。),程序一定是从main()函数进,从main()函数出

函数的声明

函数调用和函数定义的顺序。
如果调用写在了函数定义的前面,则必须加函数前置声明。

函数前置声明的作用:

  1. 告诉编译器即将可能出现的若干个字母所代表的是一个函数
  2. 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
  3. 函数声明是一个语句,末尾必须加分号
  4. 对库函数的声明过程是通过 #include<库函数所在的文件的名字.h> 来实现的 (.h表示头文件)

示例

/**
* 无返回值函数测试
*/

# include <stdio.h>

int main() {
    int a=1, b=2, c=3, d=4;
    void max(int x, int y); //函数的声明,void表示函数无返回值,max是函数名,x y是形参
    
    max(a, b);
    max(c, d);
}

//每次当调用完max函数后,max里面所有变量都会被释放掉!下次在使用max时,再为xy分配空间,分配空间的地址不一定是同一块空间!
void max(int x, int y) {
    x>y ? printf("%d\n",x): printf("%d\n", y);
}


/**
* 有返回值函数测试
*/ 

# include <stdio.h>

int main() {
    int f(void); //函数f的定义,返回值类型为int
    
    printf("%d\n", f());
}

//return;用来终止函数,向主调函数返回表达式的值,如果表达式为空,则只终止函数,不向主调函数返回任何值;
//而break;终止的是离他最近的for或switch
int f() { //括号中可写void,也可不写,表示干函数不接收数据,int表示返回值类型
    return 10.5;//向主调函数返回10,返回值类型以函数名前的类型为准!
}

函数的作用域和存储方式

变量:
按作用域分:

  • 全局变量 在所有的函数(包括主函数和普通函数)外部定义的变量,定义了的全局变量只能被其下面的函数使用,而在其上面不能被使用,因为程序代码是从上往下进行编译的;
  • 局部变量 在一个函数内部定义的变量或者函数的形参都统称为局部变量,局部变量只能在本函数内部使用。

  • 全局变量和局部变量的命名相同问题 如:
    int i = 99;
    void f(int i) {
      i = 100
      printf(i = %d\n, i); //输出结果为100
    }
    


字符和字符数组相关函数

//字符输入/输出函数
scanf(" %c", &a)
printf("%c\n", getchar())
putchar('a');

//字符串输入/输出函数
scanf/printf
gets/puts



Tags:


Share: