C语言之函数

C语言也是调用函数,也有库函数和其他第三方函数,
换一个角度学习STM32就是对函数库的学习,再换一个角度就是学习C语言的第三方函数,和单片机只有一点点关系

主要还是C语言的STM32库的学习

函数名的本质是内存代码地址

形参变量名可以省略

函数参数的传递过程是从右往左

递归无限循环容易堆栈溢出,函数返回值有副本机制,在返回的时候,另外保存一份, 原来内存或者寄存器的数据就被销毁了,数组没有副本机制

函数的递归调用--->>>>>函数自己调用自己   和goto很像,需要结束条件
简单的递归

void dosh( int num )
{
    if(num)
        return;
    else
    {
        printf("heloo C");
        dosh(num - 1);    
     }
} 

函数调用时,形参自动分配内存,新建一个变量存储传递过来的实际参数的值,会自动完成数据类型的转换,函数结束自动回收
局部变量是自动变量,作用在块语句自动回收

全局变量,不属于任何一个函数,可以被任意函数调用,创建全局变量比main函数早,全局变量的生存周期是程序的生命期,全局变量会一直占内存,而局部变量用完就扔了
全局变量容易和局部变量重名,很容易被屏蔽失效,在外挂等安全方面值容易被修改
避免占内存较大的变量使用全局变量,节约内存,避免全局变量被错误修改,正规的软件工程,写一个函数要修改全局变量,一定要注释,为什么修改。修改的目的是什么。修改的值是多少

同名的情况下局部变量会屏蔽全局变量   C++可以用::访问全局变量,C语言不可以

一个局部变量的作用域包含它的块语句内部,块语句内部变量屏蔽外部变量

有30个台阶,一次可以走一步或者两步,总共有多少种走法 递归调用

//有30个台阶,一次可以走一步或者两步,总共有多少种走法  递归调用

#include<stdio.h>
#include<stdlib.h>

double tencent(int n)
{
	if (n == 1)
		{
			return 1.0;
		}
	else if (n == 2)
		{
			return 2.0;
                }
	else
		{
		return tencent(n - 1) + tencent(n - 2);
		}
}

int main()
{

	printf("%llf\n", tencent(30));
	system("pause");

}
输入十进制,转换成二进制
#include<stdio.h>
#include<stdlib.h>

//输入十进制,转换成二进制
void change(int num)
{
	if (num == 0)
	{
		return;
	}
	else
	{
		change(num / 2);
		printf("%d",num%2);
	}
}

int mainB()
{
	int num;
	printf("输入的十进制为\n");
	scanf("%d",&num);
	printf("输出的二进制为\n");
	change(num);
	system("pause");
}
用递归函数计算累加值
#include <stdio.h>
#include <stdlib.h>

//用递归函数计算累加值

int add_100(int num)
{
	if (num == 0)
	{
		return 0;
	}
	else
	{
		return num + add_100(num - 1);	//递归运算
	}
}

int main()
{
	printf("%d\n",add_100(5) );
	system("pause");
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章