變數宣告規定了變數的型別和名字1
任何c變數的宣告都由兩部分組成:型別以及一組類似表示式的宣告符(declarator)。2
說明符(乙個或多個) 宣告表示式列表變數宣告3
int a;
unsigned
int a;
函式宣告
int
max(
)
乙個返回值為int型別的函式
指標宣告
int
*p
p是int*
型
如果按上一句,p是int*
型別,那麼有意思的是為什麼指標宣告不是
int
* a;
也就是說,c語言在設計時,就是先想到了指標*p來表達乙個記憶體位址上所有的值,然後才再有的其宣告。
這導致了我們在一條語句中同時宣告多個指標時,每乙個的前面都要加上*
int
*p,*q,
*r;
除了規定了變數的型別和名字外,還申請了儲存空間,也可能會為變數賦乙個初始值。這麼看來由第一條任何包含了顯式初始化的宣告即成為定義。1
int j;
它的意思就是宣告並定義j
了。
而
extern
int j;
//沒有申請空間
宣告j
而非定義j
。
extern
int j =
5;
定義j
而非宣告j
。
對於第二條,包含了顯式初始化的宣告
我們知道有檔案作用域的全域性變數宣告時(也就是在所有函式體外宣告的變數)4
會被預設初始化為0。
這種就不算是顯式初始化了。
我們可以簡單的理解為在宣告中加上賦值。
int a =
3;
從上面來看就有兩種:
變數建立時,給了它乙個特定的值。
int a =
3;
預設初始化
在所有函式體外宣告的變數會被預設初始化為0。 名稱
區別作用
定義只能出現在乙個地方
確定物件型別並分配記憶體,用於建立新的物件int array
宣告可以多次出現
描述物件的型別,用於指代其彵地方定義的物件。extern int array
宣告相當於普通的宣告:它所說明的並非自身,而是描述其它地方建立的物件(物件指的是變數或者函式)《c++ primer》 ↩︎↩︎定義相當於特殊的宣告:它為物件分配記憶體。5
《c陷阱與缺陷》 ↩︎
《c和指標》 ↩︎
儲存類別與鏈結↩︎
《c專家程式設計》 ↩︎
c 宣告 定義 初始化
簡述 語言型別 物件 變數 型別是乙個抽象,規定物件的時空排布 物件是乙個實體。具有屬性和方法 操作 物件屬性和方法,是否可見,可索引,可修改。變數是實體名稱或者容器名稱,總之是個名稱。介於抽象模型和物理實現之間。c中應該是編譯器為物件方法屬性等所分配的具有空間時間特性的記憶體的名字。工具編譯器 預...
C 宣告 定義 初始化
告訴編譯器某個東西的名稱和型別,但略去細節,比如 extern int x 物件object宣告 std size t numdigits int number function宣告 class widget class宣告 templateclass graphnode 模板template宣告函...
初始化 賦值 宣告 定義
初始化和賦值是兩個完全不同的操作 列表初始化 用花括號 來初始化變數,列表初始化下,如果損失精度會編譯錯誤,正常初始化則是warning 常見初始化方法 int a 1 int b int c 3 int d double e int f e warning int g error 預設初始化 定義...