程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言查漏補缺——關鍵字篇

C語言查漏補缺——關鍵字篇

編輯:關於C

Register關鍵字


Register 聲明寄存器變量【盡可能將變量存在CPU內部寄存器,不是絕對哦】

CPU讀取數據:內存——寄存器——CPU

雖然寄存器的速度非常快,但也有限制:register變量必須是能被CPU寄存器接受的類型,意味著register變量必須是一個單個的值,並且其長度應小於或等於整型的長度。而且register變量可能不存放在內存中,所以不能用取址運算符&來獲取register變量的地址。

 

 

Volatile  說明變量在程序執行中可被隱含的改變

 


Sizeof 計算對象所占內存空間的大小,這個是關鍵字(⊙o⊙)哦~

[cpp]
int i = 0; 
A)sizeof(i)  B)sizeof(int)  C)sizeof i  D)sizeof int 

int i = 0;
A)sizeof(i)  B)sizeof(int)  C)sizeof i  D)sizeof int上面,ABC都是對的,D不對。

【注意】sizeof在計算變量所占空間大小時,括號可以省略;而計算類型大小時,不能省略。

看看下面的練習:

 \

注意,sizeof(a)的值,我們再看:

 

\
【總結】Sizeof計算大小時,其實傳入的是類型,與變量具體的值無關。&a、&a[0]、&a[0][0]都是地址,所以大小都為4;a的類型是char[10][10],所以是100,同理,a[0]、a[1][1]的類型分別是char[10]和char,所以大小分別是10和1。

 

\
 

此處傳入的是指針char*,所以大小是4.若b為int[100],則傳遞的是int *。

【總結】函數參數為數組時,傳遞的不是整個數組,而是數組地址,即指針。

 


Sizeof與strlen的區別:

 \

再來一個更勁爆的:

 

 \


Sizeof計算結構體大小:

 \

成員對齊規則是:每個成員按其類型的對齊參數(通常是這個類型的大小)和指定的對齊參數中較小的一個對齊,即min(sizeof(item), n)。並且結構的長度必須為所用過的所有對齊參數的整數倍,不夠就補空字節。

 \

s1的大小為3,而s2的大小為5,說明s1的最大對齊參數是1,即s1的數據成員的最大對齊參數,而不是將s1的大小作為一個對齊參數。

 

 


Unsigned關鍵字

看一個例子:

 

 

\
Const關鍵字 == readonly

Const修飾的只讀變量必須在定義的同時初始化。

注意,case語句後面不可以是const變量。

 


Const與define

 \

Const修飾變量和數組時,可以放在類型的前面和後面:

 \


修飾指針的時候:

 \


Const修飾函數的參數,不希望參數值在函數體內意外改變。

 


Typedef關鍵字

 \


Typedef與define的區別:

Define是宏定義,在預編譯的時候起作用,只是做簡單的替換;

Typedef是為類型新建一個別名,在編譯的時候起作用。

 \


#define int32 static int

Define是用第一個字符串int32替換第二個空格後面的所有內容。

Typedef static int int32;

編譯報錯,多個類型聲明。

 

\
 


Volatile關鍵字

Volatile告訴編譯器,變量是隨時可能發生變化的,每次使用它的時候必須從內存中取出i的值。

const volatile int i = 3; 是只讀變量。

 

Union關鍵字

 


[plain]
//返回1表示是小端模式;返回0,表示是大端模式 
int checkSystem() 

    union check 
    { 
        int i; 
        char ch; 
    } c; 
    c.i = 1; 
    return(c.ch == 1); 

  //返回1表示是小端模式;返回0,表示是大端模式
  int checkSystem()
  {
      union check
      {
          int i;
          char ch;
      } c;
      c.i = 1;
      return(c.ch == 1);
  }


 static關鍵字


 修飾變量

靜態全局變量,作用域僅限於變量被定義的文件中,其他文件即使用extern聲明也沒法使用它。准確的說是從定義之處開始,到文件結尾處結束,在定義之處前面的代碼也不能使用。

靜態局部變量在函數體內定義,只能在函數內使用,但生命周期與文件相同。

【注意】靜態變量只在定義時初始化一次。如下代碼:

 

\
每次調用f1時,i的值都會遞增,不會再重新定義;每次調用f2時,j的值都會被重新復制,所以,j只遞增一次。

 

 修飾函數

靜態函數的作用域僅限於本文件(又稱內部函數)。

綜上,關鍵字static有倆含義:退出一個塊後仍然存在的局部變量;不能被其他文件訪問的全局變量和函數。

靜態變量的內存分配在堆棧,因為它們的大小在編譯的時候就是確定的。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved