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");
}





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