最近因?yàn)楣ぷ餍枰_始重新學(xué)c語言,越學(xué)越發(fā)現(xiàn)c語言深不可測(cè),當(dāng)初用python輕輕松松處理的一些數(shù)據(jù),但是c語言寫起來卻異常的復(fù)雜,這個(gè)板塊就記錄一下我的c語言復(fù)習(xí)之路
在夏邑等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),夏邑網(wǎng)站建設(shè)費(fèi)用合理。
本節(jié)tips來自小甲魚的c語言課程的演示筆記小甲魚b站視頻
1. 生存期2.存儲(chǔ)類型 auto關(guān)鍵字C語言的變量擁有兩種生存期
- 靜態(tài)存儲(chǔ)期(static storage duration)
- 自動(dòng)存儲(chǔ)期(automatic storage duration)
具有文件作用域的變量屬于靜態(tài)存儲(chǔ)期,函數(shù)也屬于靜態(tài)存儲(chǔ)期。屬于靜態(tài)存儲(chǔ)期的變量在程序執(zhí)行期間將一直占據(jù)存儲(chǔ)空間,直到程序關(guān)閉才釋放。
auto int num; // 等價(jià)于 int num;
register關(guān)鍵字register int num;
static關(guān)鍵字對(duì)局部變量的作用
延長局部變量的生命周期,從程序啟動(dòng)到程序退出,但是它并沒有改變變量的作用域
定義變量的代碼在整個(gè)程序運(yùn)行期間僅僅會(huì)執(zhí)行一次
#includevoid test();
int main()
{test();
test();
test();
return 0;
}
void test(){static int num = 0; // 局部變量
num++;
// 如果不加static輸出 1 1 1
// 如果添加static輸出 1 2 3
printf("num = %i\n", num);
}
對(duì)全局變量的作用
全局變量分類:
內(nèi)部變量:只能在本文件中訪問的變量
外部變量:可以在其他文件中訪問的變量,默認(rèn)所有全局變量都是外部變量
默認(rèn)情況下多個(gè)同名的全局變量共享一塊空間, 這樣會(huì)導(dǎo)致全局變量污染問題
如果想讓某個(gè)全局變量只在某個(gè)文件中使用, 并且不和其他文件中同名全局變量共享同一塊存儲(chǔ)空間, 那么就可以使用static
// A文件中的代碼
int num; // 和B文件中的num共享
void test(){printf("ds.c中的 num = %i\n", num);
}
// B文件中的代碼
#include#include "ds.h"
int num; // 和A文件中的num共享
int main()
{num = 666;
test(); // test中輸出666
return 0;
}
// A文件中的代碼
static int num; // 不和B文件中的num共享
void test(){printf("ds.c中的 num = %i\n", num);
}
// B文件中的代碼
#include#include "ds.h"
int num; // 不和A文件中的num共享
int main()
{num = 666;
test(); // test中輸出0
return 0;
}
對(duì)局部變量的作用
extern不能用于局部變量
extern代表聲明一個(gè)變量, 而不是定義一個(gè)變量, 變量只有定義才會(huì)開辟存儲(chǔ)空間
所以如果是局部變量, 雖然提前聲明有某個(gè)局部變量, 但是局部變量只有執(zhí)行到才會(huì)分配存儲(chǔ)空間
#includeint main()
{extern int num;
num = 998; // 使用時(shí)并沒有存儲(chǔ)空間可用, 所以聲明了也沒用
int num; // 這里才會(huì)開辟
printf("num = %i\n", num);
return 0;
}
#includeint main()
{extern int num; // 聲明我們有名稱叫做num變量
num = 998; // 使用時(shí)已經(jīng)有對(duì)應(yīng)的存儲(chǔ)空間
printf("num = %i\n", num);
return 0;
}
int num; // 全局變量, 程序啟動(dòng)就會(huì)分配存儲(chǔ)空間
static與extern對(duì)函數(shù)的作用內(nèi)部函數(shù):只能在本文件中訪問的函數(shù)
外部函數(shù):可以在本文件中以及其他的文件中訪問的函數(shù)
默認(rèn)情況下所有的函數(shù)都是外部函數(shù)
static int sum(int num1,int num2);
定義一個(gè)內(nèi)部函數(shù)
static int sum(int num1,int num2)
{return num1 + num2;
}
extern int sum(int num1,int num2);
定義一個(gè)外部函數(shù)
extern int sum(int num1,int num2)
{return num1 + num2;
}
const關(guān)鍵字注意點(diǎn):
- 由于默認(rèn)情況下所有的函數(shù)都是外部函數(shù), 所以extern一般會(huì)省略
- 如果只有函數(shù)聲明添加了static與extern, 而定義中沒有添加static與extern, 那么無效
參考const關(guān)鍵字的作用
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧