学习笔记之——C语言 函数( 二 )


int add(int x,int y)
{
int z=0;
return z=x+y;
}
int add2(int* x,int* y)
{
int z=0;
return =*x+*y;
}
int main()
{
int a=0;
 int b=9;
scanf(“%d %d”,&a,&b);
printf(“%d\n”,add(a,b));   //传值调用
printf(“%d\n”,add2(&a,&b));   //传址调用
return 0;
}
6、 函数的嵌套调用和链式访问
嵌套调用
函数和函数之间可以有机的组合的
例:
int main()
{
int a=0;
int b=0;
scanf(“%d %d”,&a,&b);
add(a,b);
add2(&a,&b);  //本句与上一句组成嵌套函数(没搞懂)
return 0;
}
链式访问
把一个函数的返回值作为另一个函数的参数
int add(int x,int y)
{
int z=0;
return  z=x+y;
}
int add2(int * x,int * y)
{
int z=0;
return z=*x+*y;
}
include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf(“%d %d”,&a,&b);
printf(“%d\n”,add(add2(&a,&b),add2(&a,&b)); //链式访问
return 0;
}
7、 函数的声明和定义
函数声明
1) 告诉编译器有一个函数叫什么,参数是什么 , 返回类型是什么,但是具体是不是存在,无关紧要
2) 函数的声明一般出现在函数使用之前,要满足先声明后使用
3) 函数的声明一般要放在头文件中
注:以博客作者的井字棋为例:
#include “game.h”   //引用头文件
//棋盘
void.showborad(char board[row][col],int row,int col);//声明
//函数的定义
//函数的定义是指函数的具体实现,交代函数的功能实现
//初始化棋盘
void showborad(char board[row][col],int row ,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
  {
for(j=0;j<col;j++)
{
   board[i][j]=’ ’;
printf(“%c”,board[i][j]);
  if(j<col-1)
{
printf(“|”);
}
}
printf(“\n”);
for(j=0;j<col;j++)
{
printf(“-“);
if(j<col-1)
{
printf(“|”);
}
}
printf(“\n”);
 }
}
8、 函数的递归
什么是递归
程序调用自身的编程技巧称为递归,递归作为一种算法在程序设计语言中广泛应用,一个过程或函数在其定义活说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题蹭蹭转化为一个与原题目相似的规模较小的问题来求解 , 递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量,递归的主要思考方式在于:把大事化小
递归的两个必要条件
1) 存在限制条件 , 当满足这个限制条件的时候 , 递归便不再继续
2) 每次递归调用之后越来越接近这个限制条件
9、 当自定义的函数名与库函数重名的时候:
根据https://zhidao.baidu.com/question/369199943840037324.html中说明:当自定义函数与库函数同名时,一般的调用是自定义函数优先,但是标准库函数并不失去意义 。只是调用方式要有所改变:用双冒号::开头是调用库函数,直接写函数名是调用自定义的函数 。
举例说明:
#include<stdio.h>
void printf()
{
puts(“12345”);
}
int main()
{
::printf(“abc\n”);
printf();
return 0;
}
运行结果如下:
abc
12345
10、
以下摘抄自谭浩强主编的《C语言程序设计》(第3版),算是我对照课本的学习笔记吧:
1、 函数是什么:
每一种计算机语言里都有子程序、函数之类,用于表达一小部分具体的功能,可以被其他部位的 函数调用使用 。函数这个概念来源于英文的function,译成中文可以是函数、概念、功能等 。函数的存在使大规模的问题处理可以分解为一个个小的问题来解决,把整个问题分成模块化组装来解决 。这是函数存在的主要意义 。另外利用调用函数的方法可以减少代码的数量,在主程序里不同部位出现的重复的功能组成单独的、可以调用的模块 , 在使用时不必重复敲入,同时还让代码直观 。
C语言使用函数化编程,main函数成为主函数,程序在编译过程中,从前往后编译,实际运行的时候通过运行程序的命令直接调用main主程序 , 在主程序里通过直接或者间接的调用其他子函数 。
2、  函数在未调用时候,不占用内存 , 不分配位置,在实参传递给形参后,程序分配内存 。在调用结束后(子函数运行完毕),释放形参单元 。所以函数是相互独立的,定义需要分别定义,不能嵌套定义 。这个应该属于局部变量的范畴了 , 后面学习局部变量应该容易理解 。

推荐阅读