- 函数的定义
- 函数的注意事项
- 如何通过被调函数修改主调函数中普通变量的值
- 一维数组名和大小
- 如何用函数来传递一维数组
- 函数是C语言的最小单位
- 函数的调用
- 递归函数
- 递归与循环对比
- 递归小问题--请问输出结果是什么
- 函数的传值和传地址
函数的返回值 函数的名字(形参列表)
{
函数的主体
}
函数的注意事项
- 函数的本质是描述实现某个特定功能
- 函数的返回值的类型称为函数的类型若函数主体的返回值和函数名前的返回值类型不同,最终返回值以函数名前的类型为准
- 注意函数调用和函数定义的顺序,如果函数调用写在了函数定义之前必须加函数前置声明并且声明要加 ; 分号
要想修改主调函数的值,实参一定要为该变量的地址,形参一定要是指针变量 通过 *p在函数中来修改变量的值
#includevoid func(int *a); int main() { int a = 0; //初始化 a 值为 0 func(&a); //调用函数 func printf("%d",a); //输出 a 的结果 } void func(int *a)//定义函数 func { *a = 10; }
地址对于不同的作用域是开放的
一维数组名和大小#includeint main() { int array[4] = { 1,2,3,4 }; printf("len = %dn", sizeof(array)); printf("len1 = %dn", sizeof(array)/sizeof(array[0])); printf("len2 = %dn", sizeof(array[0])); printf("首元素 = %dn", *array); int* p ; p = array; printf("p的大小 = %dn", sizeof(p)); printf("p = %#xn", p); printf("p = %#xn", array); printf("*p的值 = %dn",*array); printf("*p的值 = %dn", *p); //printf("p指针的大小 = %dn", sizeof(p)); printf("p的地址 = %#xnarray的地址 = %#xn", &p, &array); }
数组名传递参数的时候就相当于一个指针 但是你要去sizeof的时候他的大小就是数组的大小
数组的传递不可能通过从copy来传递 想传递必须通过指针来改变
函数是C语言的最小单位 函数的调用 递归函数直接或者间接调用自己的情形就叫做递归函数,递归是比较接近自然语言特性的一种调用方式,需要使用合理的出口。否则会报错甚至程序直接挂掉。 递归–递过去归还回来
满足递归的条件其实和循环很相似—初始化、 条件终止语句、循环
终止条件----递归条件
递归返回func(递归条件)
{
if(递归终止条件)
终止处理;
else
func(趋于递归终结条件);
}
//求n的阶乘
int factorial(int n)
{
if(n == 0)
return 1;
else
return n *factorial(n-1);//注意递归条件是否参与运算
// return n *factorial(--n);
}
int fact = factorial(5)
递归与循环对比
能用循环最好用循环
递归小问题–请问输出结果是什么#includevoid fun(int i) { if (i > 0) { fun(i / 2); } printf("%dn", i); } int main() { fun(10); return 0; }
0 1 2 5 10
函数的传值和传地址当满足不了传值的时候传递地址。。



