換一個角度學習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");
}