c++中的布林型別:
c++在c語言的基礎型別系統之上增加了bool
c++中的bool可取的值只有false和true
理論上bool只占用乙個位元組,如果多個bool變數定義在一起,可能只會各佔乙個bit,這取決於編譯器的實現
true代表真值,編譯器內部用1表示
false代表非真值,編譯器內部用0表示
bool型別只有true(非0)和false(0)兩個值
c++編譯器會在賦值時將非0值轉換為true,0值轉換為false
c++中的const:
const是常量的意思,即不可修改,但是c語言實現是偽造的比如
const int a=10;
int * p=&a;
*p=12;
printf("%d\n",a);//12
//這個時候a的值為12.c語言並沒有真正實現不可修改,僅僅表示唯讀
const int b=10;
int * p=(int *)&b;
*p=100;
printf("%d\n",*p);//100 //修改了指標的所指的空間
printf("%d\n",b);//10 //並沒有修改a的值
//本質原因是,c++編譯器實現const,時間const型別的變數儲存到符號表中,並沒有儲存到記憶體中
//因為這個時候用p獲取(&b)了b的記憶體,所以僅僅給b分配了個記憶體,供給指標p,這也符合(&b)的邏輯
//畢竟是取位址的意思,但是const型別b變數的值與其分配的記憶體空間的值無關。
c++編譯器對然可能為const常量分配空間,但不會使用其儲存空間的值。
const好處:1)如果指標做函式引數,可以有效的提高**的可讀性2)可以分清楚輸入和輸出特性,輸入是不可修改的,用const修飾一眼就可以看出來。
結論:c語言中的const變數:c語言中的const變數是唯讀變數,有自己的儲存空間
c++中的const常量:可能分配空間也可能不分配空間,這要看他使用不使用了,如果為全域性,在其它檔案中使用,則要分配空間,如果使用&操作符,也要分配空間。
c++中的const常量類似於巨集定義:
const int c=5;類似於#define c 5 (#define 的本質是替換)
不過const 常量是由編譯器處理的,提供型別檢查和作用域檢查,巨集定義是由預處理器處理,單純的文字替換。
c++中的引用:
int a=10;
int &b=a;//b就是a的別名
引用出現就必須給它賦值。
普通的引用在宣告時必須用其它的變數進行初始化
原因:引用的本質是常量指標,type & name 本質是type * const name既然是常量那就必須得初始化,那麼為什麼常量就必須初始化呢?常量的意思是不可修改,比如const int a; 這個時候沒有初始化,那麼他沒有值的話有什麼意義呢?還是要給它賦值,好這時候a=100;這就又矛盾了,常量不能修改呀!所以與語法相矛盾,即必須初始化,即引用也必須初始化。
c++編譯器在編譯過程中使用常指標作為引用的內部實現,一次引用占用的空間大小與指標相同。
從使用的角度,引用會讓人誤會是乙個別名,沒有自己的儲存空間,這是c++為了使用性,隱藏的細節,實際有空間。
const int &a = 100; //相當於const int * const a
int *b = (int *)&a;
*b = 12;
printf("a:%d", a);//12
//當使用常量(字面量,具體的數字)對const引用初始化的時候,編譯器會為字面量分配空間,並將
//引用名作為這段空間的別名
//使用常量對const引用初始化後生成乙個唯讀變數
const & 相當於const int * const e
普通引用相當於 int * const e
03 bool,const,引用,預設引數
一 bool bool val true vs中佔1位元組,記憶體中數值為0x01 val false 記憶體中數值為0x00 val 100 記憶體中數值為0x01,warning c4305 從 int 到 bool 截斷 val 1 記憶體中數值為0x01,warning c4305 從 in...
C 基礎 引用
函式中引數的傳遞方式 傳值 在函式域中為引數重新分配記憶體,而把實參的數值傳遞到新分配的記憶體中。優點 不會改變實參的值 引用 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名,也就是c 系統不為引用型別變數 分配記憶體空間。引用主要用於函式之間的資料傳遞。優點 如果實參是乙個複雜的...
C 基礎 引用
什麼是引用 引用的概念及用法 引用做引數 引用做返回值 引用和指標的區別 引用其實就是給物件 起別名 定義了乙個原有物件的同義詞,對引用進行的操作和對被引用所繫結的物件做的操作等價 用法 型別 變數名 變數名 如 int a 0 int b a 引用的型別必須與被引用的型別相同 宣告引用的同時必須對...