C语言程序自上向下执行,函数不要过于复杂
一.函数定义:
类型标识符 函数名()
{
语句
}
返回值的类型取决于函数定义时候的类型标识符,类型可以缺省,缺省是默认为int型
若是被调函数定义在主调函数之下,则需要在开始声明函数
函数不可嵌套定义,但是可以嵌套使用
二.实参和形参(实参和形参占不同的内存单元)
1.函数实参和形参,个数必须相同,最好类型也相同,如果类型不相同,会发生隐示转换
2.按值传递,实参单向传递,形参的改变不影响实参
int a=3,b=4;
3.按地址传递,改变的同一个地址的变量,即形参改变会导致实参改变.(两把钥匙开同一个门)
实参的执行顺序,从右向左
eg.
int fun(int a,int b)
{
}
int main()
{
int a=3;
fun(a,++a);传入的是4,4
}
函数可作为另一个函数的实参
max(a,max(b,c)).
如果实参是一个数组
一维数组:int a[5]
fun(int a[],int n)
fun(a,5)
二维数组:int a[5][5]
fun(int a[][5],int n)
fun(a[][5],5) 列数必须和实参列数保持一致
递归函数:间接地或直接调用函数(我用我自己)
间接:f(){g()};g()[f()}
直接:f(){f();};
写递归:1.定出口,2.找规律
eg.f(int n)
{
if(n==1) return;
else f(n-1);
}
一个正整数正序输出:
int f(int n)
{
if(n==0) return 0;
else
{
f(n/10);
printf("%d ",n%10);
}
}
int main()
{
f(123456);
}
汉诺塔
void hannuota(char a;char b;char c)
{
if(n==1)
{
count++;
printf("[%d]%c-->%c\n",count,a,c);
return;
}
hannuota(a,c,b,n-1);
hannuota(a,b,c,1);
hannuota(b,a,c,n-1);
}
int main()
{
hannuota('a','b','c',5);
return 0;
}
变量:
全局变量:在函数外定义的变量(未初始化,值为0)
作用域:从定义开始到文件结尾
生命周期:程序开始到结束
局部变量:在函数内定义的变量(未初始化,值随机)
作用域:从定义开始到函数结束
生命周期:从函数中执行定义语句开始到函数结束,函数结束回收
在复合语句中定义的变量只在复合语句中有效
static(静态)局部变量:static int a
作用域:从定义开始到函数结束
生命周期:程序开始到结束,函数结束不会被回收
static(静态)全局变量:static int a
作用:使全局变量不能被extern引用.
extern:在多文件编程中使用,作用为使用其他文件定义的函数或变量,如extern int x;extern int f(int a);一般在头文件使用,所以想要使用其他文件,一般包括头文件就行.
多文件之间不能重复定义全局变量.