局部变量
局部变量也成内部变量,在函数内部使用,不能被该函数外的代码使用
函数调用结束后,局部变量所占的内存自动释放
局部变量应该尽量定义在程序块的开头
全局变量
如果不初始化自动清0,局部变量如果不初始化会产生随机值;
对整个程序都是可见的
他不属于某个函数,而属于整个源文件
一般在main()函数之前声明全局变量
如不初始化,系统自动初始化为0
静态局部变量
只被初始化一次,在第一次进入函数时创建,退出函数时保留其值;
静态局部变量和全局变量一样,系统默认初始化为0;
函数与数组
1、数组元素作为实参传递
2、数组名作为实参传递
由于数组名就是数组的首地址。用数组名作函数参数进行传递实际上是地址的传递,即修改形参数组中的内容将相应的改变实参数组中的内容。
拓展:
sizeof(arr)/sizeof(arr[0]);
用函数实现排序;
#include <stdio.h>
#define SIZE 10
void Sort(int *p,int len){
int temp;
for (int i = 0; i < len; i++) {
for (int j = len -1; j >= i; j--) {
if (*(p + j) > *(p + j+ 1)) {
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
void print(int *p,int len){
for (int i = 0; i < len; i++) {
printf("%d,",*(p + i));
}
}
int main(int argc, const char * argv[]) {
int arr[SIZE] = {1,3,2,6,5,4,0,9,8,7};
print(arr,SIZE);
printf("\n");
Sort(arr,SIZE);
printf("排序之后的结果:\n");
print(arr, SIZE);
return 0;
}
递归
在调用一个函数的过程中又出现直接或间接的调用该函数本身,就是函数的递归调用
可以把要解决的问题转换为新问题,新问题的解决办法与原来相同,只是规模有规律的递减
每个子问题必须比原来问题的规模更小。
递归实现:5!
#include <stdio.h>
int Recursion(int n){
if (n == 1) {
return 1;
}
else{
return n * Recursion(n - 1);
}
}
int main(int argc, const char * argv[]) {
int a = 0;
printf("请输入10以内的数值:\n");
scanf("%d",&a);
int result;
result = Recursion(a);
printf("%d! = %d\n",a,result);
return 0;
}