日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言不同指令意识,C语言必须理清的概念1

發(fā)布時間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言不同指令意识,C语言必须理清的概念1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當今的社會的人或多或少都有點惰性和急功近利,在一開始學(xué)習(xí)編程的時候不喜歡閱讀那些枯燥的文字,喜歡直接去閱讀代碼,漸漸地,發(fā)現(xiàn)一個問題,那就是編程時經(jīng)常會犯一些低級錯誤,總結(jié)一下,這些錯誤源自于自己對這門語言中的基本概念一知半解,意識到那些枯燥的文字堆掌握并熟練使用一門語言的重要性,下面整理一下:

本文來自cnblogs.com/heri

1.1堆棧

是兩種數(shù)據(jù)結(jié)構(gòu)

★棧:是硬件,作用是表現(xiàn)作為一種數(shù)據(jù)結(jié)構(gòu),只能在一端插入和刪除數(shù)據(jù)的特殊線性表。

允許插入和刪除操作的一端稱為棧頂,按照后進先出的原則存儲數(shù)據(jù),插入:進棧push,刪除則為出棧pop,棧也被稱為先進后出表,在函數(shù)調(diào)用時用于存儲斷點,在遞歸中也會用到棧。

壓棧的操作使棧頂?shù)刂窚p小,彈出的操作使棧頂變大。

棧保存了一個函數(shù)調(diào)用時所需的維護信息,被稱為堆棧幀。

棧一般包括一下兩方面信息:1函數(shù)的返回地址和參數(shù) 2臨時變量(非靜態(tài)局部變量和臨時變量)

★堆:動態(tài)存儲結(jié)構(gòu),數(shù)據(jù)段中的自由存儲區(qū),用于存儲分配動態(tài)數(shù)據(jù),堆中存入的數(shù)據(jù)地址向增加方向變動,堆可以不斷進行分配直到?jīng)]有堆空間為止,可以隨時進行釋放,再分配,不存在順序問題。

堆內(nèi)存分配通常用malloc(),calloc() ,realloc()函數(shù)實現(xiàn)

堆內(nèi)存釋放使用free()函數(shù)

堆和棧在使用時生長方向相反,棧向底地址方向生長,堆向高地址生長。

默認函數(shù)內(nèi)部的壓棧操作:從上到下,從左到右,采用4字節(jié)對齊。

數(shù)組壓棧,從最后一個元素開始,直到起始元素,從右向左。

☆在不傳遞參數(shù)的情況下,print()函數(shù)中打印出main()函數(shù)中arr數(shù)組中的各個元素

1 #include

2 voidprint()3 {4 unsigned int_ebp;5 _asm{6 mov _ebp,ebp7 }8 int *p = (int *)(*(int *)_ebp-4-4-4-7*4);9 for (int i=0;i<7;i++)10 printf("%d",p[i]);11 }12 intmain()13 {14 int a =1;15 int b =2;16 char c='a';17 int arr[]={11,12,13,14,15,16,17};18 print();19 return 0;20 }

1.2全局變量和局部變量

★全局變量:外部變量,在函數(shù)體外定義,不是哪一個函數(shù)所持有的。

全局變量又分為:外部全局變量和靜態(tài)全局變量,

區(qū)別是:

使用static存儲類別的全局變量只能在被定義的源文件使用,而使用extern存儲的全局變量,可以被其他源文件中函數(shù)引用。

★局部變量:在函數(shù)中定義的變量稱為局部變量。(形參相當于在函數(shù)中定義的變量,因此也是一種局部變量)

1.3生存期和作用域

有些人對生存期有種錯誤的理解,認為變量離開了它的作用域,其生存期就結(jié)束了。

★生存期:變量占用內(nèi)存或寄存器的時長。

根據(jù)變量存儲類型不同,在編譯時,將被存放到動態(tài)存儲區(qū)或靜態(tài)存儲區(qū),其聲明周期由聲明時存儲類型決定。

本文來自cnblogs.com/heri

靜態(tài)存儲區(qū):存放全局變量和靜態(tài)變量,在執(zhí)行程序前分配存儲空間,占用固定的存儲單元。

動態(tài)存儲區(qū):存放函數(shù)的局部變量,返回值,形參,函數(shù)被執(zhí)行過程中動態(tài)分配,執(zhí)行完該函數(shù)自動釋放,這種分配和釋放是每次執(zhí)行函數(shù)進行的,所以前后兩次調(diào)用同一函數(shù),其臨時變量分配的地址可能是不同的。

1-auto

非靜態(tài)變量的局部變量即為自動變量,缺省為這個類型。

2-register

寄存器變量是為了提高執(zhí)行效率,頻繁從內(nèi)存單元存取變量相比于從寄存器中存取變量要多花費更多時間。

register聲明的寄存器類型的變量存放在寄存器中,不會占用內(nèi)存單元,可以提高程序執(zhí)行效率。不能&取地址,取不到。

事實證明,使用register的程序執(zhí)行速度提高3倍,但register的數(shù)目是有限的。

3-static

靜態(tài)變量,生存期從程序開始運行到程序結(jié)束。

靜態(tài)全局變量:只能被定義的源程序文件的函數(shù)調(diào)用。

初始化區(qū)別:

靜態(tài)局部變量:在他所在的函數(shù)被執(zhí)行時初始化,之后再執(zhí)行該函數(shù)不再初始化,保留上一次運行的結(jié)果。

靜態(tài)全局變量:在執(zhí)行main()函數(shù)之前初始化,當前值由最近一次對它賦值操作決定。

4-extern

在全局變量類型前加extern,如果沒有指定全局變量的存儲類別,則默認為extern

1.3.2作用域

一段程序代碼中所用到的變量名字并不總是有效的,限定這個bi名字的可用性的范圍就是這個名字的作用域。

局部變量的作用域僅在該函數(shù)中有效,可以在一個函數(shù)中定義與另一個函數(shù)中變量名相同的變量。

盡量避免使用相同的變量名,因為會導(dǎo)致IDE定位不準,可讀性不好。

1.4內(nèi)部函數(shù)和外部函數(shù)

函數(shù)也同樣有作用域,如果在一個源文件中定義的函數(shù)只能被該文件中的函數(shù)所調(diào)用,二不能被同一程序其他文件中的函數(shù)調(diào)用,則為內(nèi)部函數(shù),

static 函數(shù)類型 ?函數(shù)名 (參數(shù)表)

反之為外部函數(shù),若定義函數(shù)時沒有加關(guān)鍵字static或extern,也是外部函數(shù),

extern 函數(shù)類型 函數(shù)名 (參數(shù)表)

區(qū)別:作用范圍不同

使用內(nèi)部函數(shù)的優(yōu)點是,不同人編寫不同函數(shù)時,不用擔(dān)心重名,所以,在編程過程中,只需要在一個源文件中使用的函數(shù),要養(yǎng)成加static的習(xí)慣。

1.5指針變量

C語言之所以強大且有自由性,體現(xiàn)在對指針的靈活運用上,所以指針是C語言的靈魂。

存放地址的變量稱為:指針變量

一般變量存放的是數(shù)據(jù)本身,而指針變量存放的是地址。

但不能簡單的將指針理解為地址,而應(yīng)該把指針理解為指向一塊內(nèi)存區(qū)域的起始地址,指向區(qū)域的大小由所指變量的類型決定。

總結(jié)

以上是生活随笔為你收集整理的c语言不同指令意识,C语言必须理清的概念1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。