我們在日常程式設計中經常會有int a=10;,那麼
這個a就是變數。變數提供了程式可以操作的有名字的儲存區,要是在彙編時代,我們是直接操作暫存器和記憶體位址的,那麼現在就把底層的暫存器和記憶體位址抽象出來,取了乙個別名,通過這個別名也可以操作這塊記憶體。
c++中每乙個兩邊都要有乙個特定的型別,該型別決定了變數的大小和布局,能夠儲存於該記憶體中的值的取值範圍,以及可以在該變數上進行的一些操作。c++中經常把變數稱為「變數」或「物件」。
什麼是物件?一般而言,物件就是記憶體中具有型別的區域,也就是計算左值表示式就會產生物件。
1.變數初始化
在c++中變數的初始化一般分為直接初始化和複製初始化:
注意事項:在c++裡面初始化並非賦值,首先初始化是值建立變數並賦值,而賦值指的是變數之前就存在,只不過是擦除當前物件的值並賦予新值。
比如下面的:
int a=10;//複製初始化
//+++++++++++++++++++++++
int b;
b=10;//賦值,並非初始化
分清這兩者的區別對於c++程式設計尤為重要!
2.初始化多個變數
我們首先來看乙個簡單的c++賦值語句:
int number = number;
這個語句是正確還是錯誤呢?
當乙個定義中定義了兩個以上的變數的時候,每個變數都可能有自己的初始化式,物件的名字立即變為可見,所以可以用同乙個定義中前面已定義的變數初始化後面的變數:
int number1=10,number2=number1;
那麼如果是int number = number這樣的式子呢?我們前面講過複製初始化分為兩步,第一步就是建立乙個變數,第二步才是賦予新的值,我們首先建立了number這個變數,那麼number變數馬上可見,然後再用可見的number來初始化自己(雖然這樣做毫無意義,最終還是沒有初始化)。所以這個式子編譯器是不會報錯的。
變數的初始化可以分為兩種:
分清變數的定義和變數的宣告在後續的程式設計中也是尤為重要的
變數的定義:用於為變數分配記憶體空間,還可以為變數指定初始值。在乙個程式中,變數有且只有乙個定義
變數的宣告:用於向程式表明變數的型別和名字。定義也是宣告:在定義變數時我們定義了它的型別和名字。我們可以使用extern關鍵字來表明是在宣告而不是在定義。 如:
extern int a ;//宣告
int a ;//定義
extern不分配儲存空間,只能說明變數定義在程式的其他地方,比如在其他的c檔案裡面:
int a=10;
//++++++++++++++++++
extern int a;
main()
編譯結果為:
gcc -c main.c -o main.o
cc -c -o example.o example.c
gcc main.o example.o
沒有任何問題。
如果在宣告時有初始化式子,那麼它就可以被當做是定義!
int a=10;
//++++++++++++++++++
extern int a=11;//錯誤,在鏈結兩個example.o 和 main.o的時候a就重定義了
main()
gcc -c main.c -o main.o
main.c:4:12: warning: 『a』 initialized and declared 『extern』 [enabled by default]
extern int a=11 ;
^cc -c -o example.o example.c
gcc main.o example.o
example.o:(.data+0x0): `a'被多次定義
main.o:(.data+0x0):第一次在此定義
collect2: error: ld returned 1 exit status
make: *** [main] 錯誤 1
C 查缺補漏之變數和基本型別
1.塊處理儲存 一般來說計算機以位序列儲存資料,每一位儲存0或1,一段記憶體可能儲存著0001010010101010.但是這樣的儲存是沒有任何意義的,讓儲存器具有結構的方法是塊處理儲存,那麼什麼是快處理儲存呢,就是用2 n表示乙個儲存塊的位數 一般以8位作為乙個塊 這樣操作起來更加方便。如下圖 1...
c 查缺補漏
c 基本語法 c 初始化引數列表 c 預設建構函式 c 複製建構函式 三 複製控制 1 複製建構函式 1.1 幾個要點 1 複製建構函式 複製建構函式是一種特殊建構函式,只有1個形參,該形參 常用 const 修飾 是對該類型別的引用。class peopel 當定義乙個新物件並用乙個同型別的物件對...
bootstrap 查缺補漏
bootstrap標題樣式進行了以下顯著的優化重置 單行內聯 多行塊 注pre.pre scrollable 控制 塊區域最大高度為340px,一旦超出這個高度,就會在y軸出現滾動條 使用者輸入 複製 table 基礎 table striped 斑馬線 table bordered 帶邊框的 ta...