對階段性筆記進行整理,以便簡單回顧
const int a;//c語言中編譯可以通過,c++中不可以通過
int const a;//兩個一樣的
char *p = malloc(100); //c中可以編譯可以通過,c++中不可以通過
c語言直到c99標準才增加了對布林型別的支援,關鍵字為_bool,因為bool已經被c++用了,所以選了這個十分奇怪的關鍵字。
bool:c++內建對布林型別的支援,其關鍵字是bool。布林型,一般1個位元組;取值false和true,是0和1的區別。c++編譯器將會在賦值時將非0值轉換為true,0轉換為false.
bool: int型,據編譯環境決定,一般4個位元組
c語言沒有真正的列舉型別,例子:
enum day today;
today = 100; //c中可以通過,列舉本身應為常量
season s;
s = 100; //c++中不可以通過
int a,b = 10;
(a = b) = 10; //表示式是不可以被賦值的 c中不可以 c++中可以
(a !=b?a:b) = 1000; // c中不可以 c++中可以
a = b =10; //c中可以 c++中不可以
兩者相同功能,但是前者為物件,後者為函式
char name[30];
scanf(「%s」, name);//不安全 容易越界導致崩潰
cin>>name; //流輸入運算子 針對鍵盤輸入流
cout<<」name =「 << name << endl; //先把name=流到cout裡,再把那麼流到cout裡,最後end1流到cout;
c中的命名空間
在c語言中只有乙個全域性作用域
c語言中所有的全域性標示符共享同乙個作用域
標示符可能衝突
c++中的命名空間
命名空間將全域性作用域分成不同的部分
不同空間中的標示符可以相同而不會發生衝突
命名空間可以相互巢狀
全域性作用域也叫預設命名空間
register關鍵字請求編譯器將區域性變數儲存於暫存器中
c語言中無法取得register變數位址
c++中可以取得register變數位址,且c++編譯器有自己的優化方式,不使用register也可能做優化
早期c語言編譯器不會對**進行優化,因此register對變數的宣告變得無效
c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效
c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別
c++中的struct是乙個新型別的定義宣告
c++中所有的變數和函式都必須有型別
c語言中的預設型別在c++中是不合法的
c語言中的const**變數**是唯讀變數,有自己的儲存空間
c++中的const**常量**,修飾的常量在編譯期間就確定下來
可能分配儲存空間,也可能不分配儲存空間
當const常量為全域性時,並且需要在其它檔案中使用,會分配儲存空間。
當使用&操作符取const常量的位址,會分配儲存空間
當const int &a = 10;const修飾引用時,也會分配儲存空間
const和#define的區別
c++中的const常量類似於巨集定義
const int c = 5; 類似 #define c 5
c++中的const常量與巨集定義不同
const常量是由編譯器處理的,提供型別檢查和作用域檢查
巨集定義由預處理器處理,單純的文字替換
1)引用在c++的內部實現是乙個常指標
type &name <–> type* const name
2)c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的記憶體空間大小於指標相同
3)從使用的角度,引用會讓人誤認為其只是乙個別名,沒有自己的儲存空間,這是c++為了實用性而做出的細節隱藏
void fun(int &a )——–void fun(int *const a)
————————— }
4)仔細對比間接賦值成立的三個條件
定義兩個變數(乙個實參,乙個形參)
建立關聯,實參取位址傳遞給形參
*p去間接的修改實參的值
引用在實現上只不過是把間接賦值的後兩個條件合和二為一
(當實參傳給形參引用時,只不過是c++編譯器幫我們程式設計師手工取了乙個實參位址,傳給了形參引用(常量指標))
引用當左值(c++引用使用時的難點)
當函式返回值是引用時
若返回棧變數,不能成為其他引用的初始值,不能作為左值使用
若返回靜態變數或者全域性變數,可以成為其他引用的初始值,即可作為右值使用,也可作為左值使用
C回顧與C 概述
一 c回顧 1.變數 區域性變數 區域性變數是在函式中定義的臨時變數,作用域是從變數的定義處開始,到函式結尾。靜態區域性變數具有區域性作用域,它只被初始化一次,自從第一次被初始化直到程式執行結束都一直存在,但靜態區域性變數只對定義自己的函式體可見。外部變數 外部變數是在函式外部定義的全域性變數,作用...
C 回顧之函式
區域性靜態物件 第一次經過物件定義語句時初始化,之後不再執行初始化語句,直到程式終止物件才會被銷毀。給函式傳遞引數時盡量使用引用避免拷貝,同時如果函式無須改變引用形參的值,最好將其宣告為常量引用,這很重要,能夠避免很多錯誤。頂層const和底層const。頂層const是指標本身是const不可改變...
C 回顧之順序容器
順序容器型別 vector deque 雙端佇列,也可快速隨機訪問 list 雙向鍊錶 forward list 單向鍊錶 array 比內建陣列更安全 string string 和 vector 都是將元素儲存在連續的記憶體空間。快速隨機訪問,但插入刪除就很慢。應該使用標準庫容器,而不是原始的資...