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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言——关键字

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言——关键字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言——關鍵字


宗旨:技術的學習是有限的,分享的精神是無限的。


【謹記:盡量不要用printf函數,要去看變量的值,內存的值?!?/p>

?autointdoublelongcharfloatshortsignedunsignedstructunionenumstaticswitchcasedefaultbreakregisterconstvolatiletypedefexternreturnvoidcontinuedowhileifelseforgotosizeof。

【定義和聲明:定義創建了對象并為這個對象分配了內存,聲明沒有分配內存?!?

auto????????????????//聲明自動變量,缺省時編譯器一般默認為auto
int?????????????????//
聲明整型變量?
double?????????????//
聲明雙精度變量
long???????????????//
聲明長整型變量?
char???????????????//
聲明字符變量
float???????????????//
聲明浮點型變量?
short???????????????//
聲明短整型變量
signed?????????????//
聲明有符號類型變量
unsigned???????????//
聲明無符號類型變量?
struct??????????????//
聲明結構體變量
union??????????????//
聲明聯合類型數據
enum??????????????//
聲明枚舉類型
static??????????????//
聲明靜態變量???
switch?????????????//
用于開關語句???
case??????????????//
開關語句分支
default????????????//
開關語句中的其他分支?
break?????????????//
跳出當前循環
register???????????//
聲明寄存器變量?
const?????????????//
聲明只讀變量???
volatile???????????//
說明變量在程序執行中可被隱含地改變
typedef???????????//
用以給數據類型取別名
extern????????????//
聲明變量是在其他文件正聲明(也可以看做是引用變量)
return????????????//
子程序返回語句(可以帶參數,也可不帶參數)
void?????????????//
聲明函數無返回值或無參數,聲明空類型指針
continue?????????//
結束當前循環,開始下一輪循環??
do??????????????//
循環語句的循環體??
while????????????//
循環語句的循環條件
if???????????????//
條件語句
else?????????????//
條件語句否定分支(if連用)?
for??????????????//
一種循環語句
goto????????????//
無條件跳轉語句,盡量少用或者不用
sizeof???????????//
計算對象所占內存空間大小,這不是個函數???

我在這兒只說一些比較常用而且比較重要的關鍵字

?

1. register

請求編譯器盡可能的將變量存到CPU內部寄存器中而不是通過內存尋址訪問以提高效率。。對這種變量不可以使用取址運算符來獲取其地址,因為它不再內存中。寄存器變量用的不算多,但是還是得知道是什么意思。?


2. static---?修飾變量和函數(限定作用域)

1.修飾變量

//變量又分為局部和全局變量,但它們都存在于內存的靜態區。
//靜態全局變量,作用域僅限于變量被定義的文件中,其他文件即使用extern聲明也沒法使用。
準確地說作用域是從定義之處開始,到文件結尾處結束,在定義之處前面的代碼行也不可以使用。
//靜態局部變量,在函數體里面定義的,就只能在這個函數里用,同一個文檔中的其他函數也用不了。
由于被static修飾的變量松獅存在內存的靜態區,所以即使這個函數運行結束,
這個靜態變量的值還是不會被銷毀,函數下次使用時仍然能用。

2.修飾函數

//函數前加static使得函數成為靜態函數。
但此處static的含義不是指存儲方式,而使指對函數的作用域僅局限于本文件(所以又稱內部函數)。
使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其他文件的函數同名。

//在C中引入關鍵字static是為了表示退出一個塊后仍然存在的局部變量。
//隨后,static在C中有了第二種含義:用來表示不能被其他文件訪問的全局變量和函數。
為了避免引入新的關鍵字,所以仍然使用static關鍵字來表示這第二種含義。

?

3. 基本數據類型:short、longintcharfloat、double(共6種)

構造數據類型:數組、結構體struct、公用體union、枚舉類型enum

空類型void

【short為2個字節,int為4個字節,long為4個字節,float為4個字節、

?double為8個字節,char為1個字節(一般情況下)】

【隱式類型轉換:short,char → int →unsigned??int → long → double(主干道)?←float】

?

4. sizeof關鍵字計算變量所占空間?–?數組做函數參數時,退化為指針,4字節

??sizeof?(int)*p??-----??sizeof(int) * p = 4p

??再次強調,sizeof不是函數,而是關鍵字。

?

5. signedunsigned關鍵字:

//32位的signedint類型整數其值表示范圍為:-2^31~2^31-1
//8位的signed char類型其值表示范圍為:-2^7~2^7-1
//32位的unsigned int類型整數其值表示范圍為:0~2^32-1
//8位的unsigned char類型其值表示范圍為:0~2^8-1

??在計算機中,數值是以補碼的形式存儲:使用補碼,可以將符號位與其他位統一處理,同時減法也可以按加法處理。

?

6. ifelse關鍵字:

寫if語句時,一般情況下先處理正常情況再處理異常情況,以便提高效率,可讀性也較好;bool一般初始化為false比較好;int,float,指針變量?與0的比較問題(整形可以直接與0比較;float是實型,不能精確到0;指針變量與NULL)

if(flag) --- bool

if(0 == i) --- int

if(i > -0.000001 && i <0.000001)??--- float

if(NULL == p) ---?指針變量

?

7. switch/case關鍵字:【解決多分支的問題】

??每個case語句結尾加break;最后必須使用default分支。

case后面只能是整形或者字符型的常量或常量表達式。

?

8. do/while/for關鍵字:(3種循環結構)

while:先判斷while后面括號里的值,如果為真則執行其后面的代碼;否則不執行
do-while:先執行do后面的代碼,然后再判斷while后面括號里的值,如果為真,循環開始;否則,循環不開始。用法和while沒有區別,但相對較少用。---??至少執行一次
for:可以很容易的控制循環次數,多用于事先知道循環次數的情況。

【多重循環時,最長的循環放在最內層,最短的放在最外層,以提高執行效率;循環不要超過3層嵌套】

?

9. break終止本層循環;continue終止本次循環,開始下一次循環;return終止函數。

?

10. void關鍵字:空即是色”---?很強大

?---?函數返回值的限定;函數參數的限定。

任何指針類型都可以直接賦給void *類型,反過來就不行;不能定義一個void變量。

//void *memcpy(void *dest, const void *src, size_tlen);

//void *memset(void *buffer, int c, size_t num);

能說的比較少,但是void關鍵字真的是很強大,這點毋庸置疑。

?

11. return關鍵字:

??---?終止一個函數并返回其后跟的值

??【別返回棧內存的的指針,因為該內存在函數體結束時被自動銷毀,會導致程序錯誤】

?

12. const關鍵字:?----?不是常量,而是只讀變量;用得好的話大大提高程序的效率

const修飾的是只讀的變量,其值在編譯時不能被使用,因為編譯器在編譯時不知道其存儲的內容。
const推出的初始目的,正是為了取代預編譯指令,消除它的缺點,同時繼承它的優點。

const和define的區別:const修飾的只讀變量,并且在定義的同時進行初始化;const可以節省空間,避免不必要的內存分配,同時提高效率;修飾一般變量,一般變量是指簡單類型的只讀變量;修飾數組;修飾指針;修飾函數的參數,當不希望這個參數值被函數體內意外改變時使用;修飾函數的返回值,表示返回值不可被改變;在另一連接文件中引用const只讀變量。

【編譯器通常不為普通const只讀變量分配存儲空間,而使將它們保存在符號表中,這使得它成為一個編譯器件的值,沒有了存儲與讀內存的操作,使得它的效率也很高;const定義的只讀變量從匯編的角度看,只是給出了對應的內存地址,而不是像define一樣給出的立即數】

const M = 3;??int a[M]; ---?錯誤的,數組里面不能是變量,即使是只讀

#define M 3???int a[M]; ---?正確的,預處理的時候做宏替換

const?int?*p;//p可變,p指向的對象不可變

int?const?*p;//p可變,p指向的對象不可變

int?*const?p;//p不可變,p指向的對象可變

const?int?*const?p;//指針p和p指向的對象都不可變

?

13. volatile關鍵字:?---?判別普通工程師和嵌入式工程師

??防止編譯器優化,做嵌入式這行的不認識這個關鍵字,就要回家多修煉修煉啦!

?

14. extern關鍵字:

extern修飾變量或者函數,以表示變量或者函數的定義在別的文件中。從而提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。

?

15. struct關鍵字:?---?寫程序的時候盡量別使用全局變量,而是打包成結構體

??將相關聯的數據打包成一個整體;空結構體的大小不是0,而是1;

??柔性數組:結構體最后的數組大小未知,內核鏈表中用柔性數組較多。

Type *p=( Type*)malloc(sizeof(Type)+100*sizeof(int));

【柔性數組與結構體沒關系,算不上結構體的正式成員。】

struct和class:默認屬性不同,struct是public,class是private。

?

16. union關鍵字:

??大小是聯合體中最大的成員的大小,而不是所有成員的大小和,此點和結構體不同;同一時間聯合體只能訪問數據成員中的一個,不能訪問多個。

用聯合體可以判斷大小端模式的問題:?

void check(void) {union{inti;intj;} stu;stu.i= 5;return(5 == stu.j):1,0; }

17. enum關鍵字:

??---?枚舉定義的是一堆常量,比如星期,顏色等

?

18. typedef關鍵字:?---?起別名,注意與define的區別,個人認為比define好用

typedef unsigned char uchar;

#define uchar unsigned char

(typedef結尾加分號,define不需要)

推薦使用typedef,因為在給指針進行替換的時候,define往往達不到效果;

#define char* PPP

PPP a,b;//只有a是char*的,b不是,用typedef就不同

?


總結

以上是生活随笔為你收集整理的C语言——关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。