欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中那些你必須知道的常用關鍵字

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

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

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

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

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

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

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

2. 關鍵字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)用時重新創(chuàng)建初始化。

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

//static 修飾局部變量的時候
//本來一個局部變量是存放在棧區(qū)的,如果被static修飾就存儲到靜態(tài)區(qū)了
//static 修飾局部變量改變了變量的存儲類型(位置),使得這個靜態(tài)變量的生命周期變長了,直到程序結束才結束
//但是作用域不變
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關鍵字把變量a修飾成了靜態(tài)變量,所以變量 a a a 本來是存放在棧區(qū)的,但是由于被修飾成靜態(tài)變量所以被存放在靜態(tài)區(qū)了。

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

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

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

而沒有修飾呢:

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

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

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

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

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

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

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

靜態(tài)全局變量

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

整個工程

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

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

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

說明:static 修飾全局變量

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

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

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

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

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

  • static 修飾函數(shù)和static修飾全局變量是一樣的
  • 函數(shù)是具有外部鏈接屬性的,但是被static修飾,就變成了內(nèi)部鏈接屬性
  • 使得這個函數(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這個標識符常量

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

#define 定義宏

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

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

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

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

那么宏是怎么調(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);在編譯的時候就把ADD這個宏替換成這樣

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

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

4.關鍵字 typedef

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

示例:

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

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

相關文章

  • 字符串的模式匹配詳解--BF算法與KMP算法

    字符串的模式匹配詳解--BF算法與KMP算法

    這篇文章記錄一下串里面的模式匹配,模式匹配,顧名思義就是給定一個被匹配的字符串,然后用一個字符串模式(模型)去匹配上面說的字符串,看后者是否在前者里面出現(xiàn)。常用的有2種算法可以實現(xiàn),下面我們來具體探討下
    2014-08-08
  • C++淺析函數(shù)重載是什么

    C++淺析函數(shù)重載是什么

    C++?允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-08-08
  • C++與QML進行數(shù)據(jù)交互的常見方法總結

    C++與QML進行數(shù)據(jù)交互的常見方法總結

    這篇文章主要為大家詳細介紹了C++與QML進行數(shù)據(jù)交互的常見方法,文中 的示例代碼講解詳細,具有一定的參考價值,有需要的小伙伴可以跟隨小編一起了解一下
    2023-10-10
  • C++?實現(xiàn)讀寫鎖的代碼詳解

    C++?實現(xiàn)讀寫鎖的代碼詳解

    C++讀寫鎖是一種多線程同步機制,它允許多個線程同時讀取共享數(shù)據(jù),但只允許一個線程寫入共享數(shù)據(jù),這種鎖可以提高程序的并發(fā)性和性能,本文給大家介紹了C++?實現(xiàn)讀寫鎖的代碼,需要的朋友可以參考下
    2023-10-10
  • 一文帶你了解C++中的字符替換方法

    一文帶你了解C++中的字符替換方法

    這篇文章主要為大家詳細介紹了C++中常用的幾個字符替換方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • 用C語言實現(xiàn)2048游戲

    用C語言實現(xiàn)2048游戲

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)2048游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++深入探究引用的使用

    C++深入探究引用的使用

    引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結介紹了C++中引用的相關知識點,需要的朋友可以參考下
    2022-05-05
  • Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    遺傳算法起源于對生物系統(tǒng)所進行的計算機模擬研究。其本質(zhì)是一種高效、并行、全局搜索的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,并自適應地控制搜索過程以求得最佳解。本文將利用其求解非連續(xù)函數(shù)問題,需要的可以參考一下
    2022-09-09
  • C++存儲持續(xù)性生命周期原理解析

    C++存儲持續(xù)性生命周期原理解析

    這篇文章主要為大家介紹了C++存儲持續(xù)性生命周期原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • C語言實現(xiàn)學生個人消費管理系統(tǒng)

    C語言實現(xiàn)學生個人消費管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言學生個人消費管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論