這篇介紹C語言里函數的定義、子函數的使用。接著介紹變量的作用域,定義全局變量、靜態變量、只讀變量、變量初始化等等。
一、函數定義
//定義一個函數
int func(int a,int b)
{
}
<函數的返回值類型> <函數名稱>(函數的形參列表,....)
{
函數代碼主體部分;
}
<函數的返回值類型>: 返回值類型可以是C語言支持任何類型。基本數據類型、指針、結構體、枚舉…
如果函數執行完畢,不需要返回值,可以將函數返回值類型聲明為空類型。Void
函數名稱 :不能與庫函數名稱沖突,命名規則與變量命名規則一樣。
函數的形參列表 :函數在執行行傳入的參數,類型與返回值類型定義方法一樣。
如果有多個形參,可以使用逗號隔開
函數的返回值: 如果函數執行完畢之后需要向調用處返回數據,可以使用return,該語句只能返回一個值。
int func(int,int); //聲明func函數
//int func(int a,int b);//聲明func函數
int main(void)
{
int a;
a=func(12.34,56.78); //形參傳入之后,會轉為整型
printf("a=%d ",a);
return 0;
}
//定義一個函數
int func(int a,int b)
{
int c;
c=a+b;
return c; //給調用者返回結果
}
二、函數練習作業
(1)編寫一個判斷某一年是否是閏年的函數。(條件: 能整除4且不能整除100 或者能整除400 )
int func_year(int year); //聲明函數
int main(void)
{
int year; //c89標準
int err=0;
printf("輸入一個年份:");
scanf("%d",&year);
err=func_year(year);//調用函數
if(err==1)
{
printf("閏年! ");
}
else if(err==0)
{
printf("平年! ");
}
else
{
printf("輸入的年份錯誤! ");
}
return 0;
}
(2)該函數由主函數調用,判斷平年和閏年。
/*
函數功能: 判斷平年和閏年
返回值 : 0表示平年,1表示閏年,負數表示錯誤
*/
int func_year(int year)
{
if(year<1900)return -1; //加一個限制條件
if((year%4==0&&year%100!=0)||year%400==0)
{
return 1;
}
return 0;
}
(3)輸入一個華氏溫度,輸出攝氏溫度,計算公式為(華氏度-32)×5÷9 要求結果保留兩位小數。
float func_temp(float temp); //聲明函數
int main(void)
{
float temp;
printf("輸入一個溫度值:");
scanf("%f",&temp);
printf("temp=%.2f ",func_temp(temp));
return 0;
}
/*
函數功能: 計算溫度
返回值 : 攝氏度
*/
float func_temp(float temp)
{
//(華氏度-32)×5÷9
return (temp-32)*5/9.0;
}
(4)封裝函數,打印以下圖案:回文三角形,形參可以決定行數。
1
121
12321
1234321
(5)計算百分比與數據自動轉換
int main(void)
{
float data;
data=(10/60.0)*100; //運算時,需要一個數據是浮點數,運算中才可以使用浮點方式存儲
printf("data=%.0f%% ",data);
return 0;
}
(6)函數返回值例子: 限定范圍
int func(int a);
int main(void)
{
printf("%d ",func(200));
return 0;
}
int func(int a)
{
return (a==100); //限定范圍值為0和1
}
三、 變量的作用域
3.1 全局變量和局部變量
const int c; //定義只讀變量
static int b; //定義靜態變量
說明: 變量定義作用域分為全局變量和局部變量。
1.局部變量和全局變量名稱可以相同。
2.如果局部變量名稱與全局變量名稱相同,優先使用局部變量。
void func(int);
int data=123; //全局變量(公用變量)
int main(void)
{
int data=456; //局部變量
printf("data1=%d ",data);
func(666);
return 0;
}
void func(int data)
{
printf("data2=%d ",data);
}
3.2 只讀變量
void func(int);
const int data=888; //只讀變量
int main(void)
{
//data=666; 錯誤的
printf("%d ",data);
return 0;
}
void func(int data)
{
printf("data2=%d ",data);
}
3.3 靜態變量
?靜態變量測試
int func(void);
int main(void)
{
int i,data;
for(i=0;i<5;i++)
{
data=func();
}
printf("data=%d ",data);
return 0;
}
int func(void)
{
//int data=0; //局部變量,生命周期隨著函數調用結束而終止。
static int data=0; //靜態變量,生命周期與main函數一樣。
//static int data=0 只有第一次執行有效
data++; //data=data+1 ,1
return data;
}
3.4 靜態全局變量
//int data; 全局變量,可以在其他.c文件引用
static int data=0; //靜態全局變量-----局部變量
//靜態全局變量: 表示該data變量不能被其他文件所引用。
//防止全局變量,重命名。
int main(void)
{
return 0;
}
3.5 靜態函數
static int func(void);
int main(void)
{
func();
return 0;
}
//定義靜態函數,表示該函數只能在本文件使用。
static int func(void)
{
printf("123 ");
}
3.6 變量的初始化值
static int data1;
int data2;
int main(void)
{
int data3; //局部變量
static int data4;
printf("data1=%d ",data1); //0
printf("data2=%d ",data2); //0
printf("data3=%d ",data3); //未知值
printf("data4=%d ",data4); //0
int cnt;
//cnt++;
/*
for(i=0;i<5;i++)
{
if(xxxx)data3|=0x1;
data3<<=1;
}*/
return 0;
}
-----------------------------------
著作權歸作者所有:來自51CTO博客作者DS小龍哥,原文鏈接:https://blog.51cto.com/u_11822586/5256783
寫在最后:另外,對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
原文標題:C語言干貨:函數知識詳解(變量的作用域,全局變量,靜態變量)
文章出處:【微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
-
C語言
+關注
關注
180文章
7604瀏覽量
136685 -
函數
+關注
關注
3文章
4327瀏覽量
62569 -
作用域
+關注
關注
0文章
6瀏覽量
6115
原文標題:C語言干貨:函數知識詳解(變量的作用域,全局變量,靜態變量)
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論