最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中那些你必須知道的常用關(guān)鍵字

 更新時(shí)間:2023年06月27日 16:27:36   作者:鴿芷咕  
這篇文章主要介紹了C語言中我們常用的關(guān)鍵字靜態(tài)static的詳細(xì)講解和typedef?、#define定義常量和宏,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. C/C++中內(nèi)存大致分的三個(gè)區(qū)域

棧區(qū)(stack):由編譯器自動分配釋放。

存放 :局部變量、形參、返回值。

堆區(qū) (heap): 由程序員分配內(nèi)存和釋放。

調(diào)用函數(shù) :malloc() free()等。

靜態(tài)區(qū) :通常是用于那些在編譯期間就能確定存儲大小的變量的存儲區(qū),全局變量和 靜態(tài)變量。

2. 關(guān)鍵字static

在C語言中:

static是用來修飾變量和函數(shù)的

1. 修飾局部變量-稱為靜態(tài)局部變量

2. 修飾全局變量-稱為靜態(tài)全局變量

3. 修飾函數(shù)-稱為靜態(tài)函數(shù)

靜態(tài)局部變量

示例:

大家來來看這段代碼

局部變量a,在沒有static修飾之前局部變量a是存放在棧區(qū)的。所以每次出局部范圍就銷毀(把空間還給操作系統(tǒng))。然后,調(diào)用時(shí)重新創(chuàng)建初始化。

那我們把局部變量a加上static關(guān)鍵字修飾成靜態(tài)局部變量,會怎么樣呢?

//static 修飾局部變量的時(shí)候
//本來一個(gè)局部變量是存放在棧區(qū)的,如果被static修飾就存儲到靜態(tài)區(qū)了
//static 修飾局部變量改變了變量的存儲類型(位置),使得這個(gè)靜態(tài)變量的生命周期變長了,直到程序結(jié)束才結(jié)束
//但是作用域不變
void test()
{
	static int a = 5;//靜態(tài)變量的
	a++;
	printf("%d ", a);
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

這里static關(guān)鍵字把變量a修飾成了靜態(tài)變量,所以變量 a a a 本來是存放在棧區(qū)的,但是由于被修飾成靜態(tài)變量所以被存放在靜態(tài)區(qū)了。

靜態(tài)區(qū)變量的特點(diǎn):

創(chuàng)建好后,直到程序結(jié)束才銷毀

這里說明了:靜態(tài)變量a在程序編譯的時(shí)候就自動創(chuàng)建好了,并且已經(jīng)完成初始化了

而沒有修飾呢:

沒有修飾之前必須進(jìn)入函數(shù)體中初始化語句才會完成初始化。

靜態(tài)局部變量的作用域和生命周期

前面我們說了靜態(tài)變量是創(chuàng)建完成后,直到程序結(jié)束才銷毀。

所以,靜態(tài)變量的生命周期是整個(gè)工程。

而靜態(tài)局部變量的作用域呢?

雖然我們把變量a修飾成了靜態(tài)局部變量但是他本質(zhì)上還是個(gè)局部變量

所以他的作用域不變還是它所在的局部范圍

靜態(tài)全局變量

我們都這樣全局變量的作用域是

整個(gè)工程

可以看到只要在一個(gè)工程內(nèi),不同.c文件之間只要(聲明)也可以調(diào)用。

說明:全局變量具有外鏈接屬性。

但是我們用static關(guān)鍵字修飾成靜態(tài)全局變量看看

說明:static 修飾全局變量

  • 改變了這個(gè)全局變量的鏈接屬性,由外邊鏈接屬性變成了內(nèi)部鏈接屬性
  • 就是這個(gè)靜態(tài)變量只能在自己所在的源文件內(nèi)部使用,不能在其他源文件內(nèi)部使用了
  • 感覺像是作用域變小了

靜態(tài)函數(shù)

static修飾函數(shù)和修飾全局變量是一樣

用static修飾函數(shù)了之后

說明:用static修飾函數(shù)

  • static 修飾函數(shù)和static修飾全局變量是一樣的
  • 函數(shù)是具有外部鏈接屬性的,但是被static修飾,就變成了內(nèi)部鏈接屬性
  • 使得這個(gè)函數(shù)只能在自己所在的源文件內(nèi)部使用,不能在其他文件內(nèi)部使用的

3.#define 定義常量和宏

#define 定義常量

#define M 100
int main()
{
	int arr[M] = {0};//100*4 = 400
	int m = M;
	printf("%d\n", sizeof(arr));//400
	printf("%d\n", M);
	printf("%d\n", m);
	return 0;
}

這里#define 定義的是M這個(gè)標(biāo)識符常量

  • 以后我們在碰到M的時(shí)候編譯器在編譯期間,就會自動替換為常量100。
  • 通常在定義數(shù)組時(shí)使用或者重復(fù)值時(shí)。

#define 定義宏

我們來看一下宏是怎么定義的:

和定義函數(shù)非常相識

但是宏沒有函數(shù)的返回類型和參數(shù)類型

還是很不一樣的,宏的實(shí)現(xiàn)體一般都是表達(dá)式

那么宏是怎么調(diào)用的呢?和函數(shù)有什么區(qū)別嘞?

//宏
#define ADD(x, y) ((x)+(y))
//函數(shù)
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a, b);
	//int c = (a)+(b);
	printf("%d\n", c);
	int d = Add(a, b);
	printf("%d\n", d);
	return 0;
}

我們可以看到宏的調(diào)用也和函數(shù)產(chǎn)不多,但是

int c = ADD(a, b);這段代碼調(diào)用宏的本質(zhì)是替換

int c = (a)+(b);在編譯的時(shí)候就把ADD這個(gè)宏替換成這樣

而函數(shù)調(diào)用是

把實(shí)參傳到函數(shù)形參里面進(jìn)行計(jì)算,然后在返回值

4.關(guān)鍵字 typedef

typedef 顧名思義是類型定義,這里應(yīng)該理解為類型重命名。

示例:

//將unsigned int 重命名為uint_32, 所以uint_32也是一個(gè)類型名
typedef unsigned int uint_32;
int main()
{
    //觀察num1和num2,這兩個(gè)變量的類型是一樣的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}

到此這篇關(guān)于C語言中那些你必須知道的常用關(guān)鍵字的文章就介紹到這了,更多相關(guān)C語言關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

阿拉善右旗| 桐柏县| 奉化市| 湘西| 昌图县| 屯昌县| 蕲春县| 灵川县| 保靖县| 莱州市| 海晏县| 桂阳县| 虎林市| 嵊泗县| 镇沅| 阳山县| 翼城县| 通城县| 育儿| 无为县| 扶余县| 邛崃市| 古丈县| 南靖县| 石河子市| 依安县| 二连浩特市| 诏安县| 南涧| 富蕴县| 蒲城县| 乐都县| 乐昌市| 慈溪市| 清水县| 金山区| 女性| 德安县| 兴山县| 濉溪县| 邯郸县|