(1)非空的區別。引用不能為空。
(2)可修改區別。引用一旦被初始化,就會一直指向初始化的物件。
(3)合法性區別。在程式設計時,使用指標之前應該檢測其是否為空值。
(4)應用區別。指標多用於可能會不指向任何物件的情況
int (*(* f)(int int)(int));//f是乙個函式指標,它指向引數是兩個int的函式,該函式的返回值是另乙個函式,即函式2,函式2的引數是int,返回值是int
int (* ptr);//是乙個指向整型陣列的指標
int * ptr ;//是指標陣列
int * (ptr );//同上
int ptr;//是乙個普通的陣列
當delete乙個指標後,而沒有將其設為空值,實際上僅僅是編譯器釋放記憶體,但指標依然指向原來的空間,導致不可**的錯誤。
malloc/free是庫函式,new 和delete是操作符。都可以用來動態地申請和釋放記憶體。
物件需要在建立和銷毀之時執行建構函式和析構函式,庫函式不再編譯器控制許可權之內,不能完成這樣的工作。所以需要new/delete
auto_ptrptr(new t);
auto_ptr放在容器裡是不安全的
(1)this在成員函式的開始前構造,在成員的結束後清除。
(2)不占用物件的空間
(3)this因編譯器不同而有不同的放置位置。可能是堆,棧,也可能是暫存器。
int * p;
*p=5;//錯誤,沒有分配記憶體
int *a;
int b=0;
int * c=&b;
*a=*c;//是拷貝而不是指向,系統在拷貝是臨時給了個隨機位址,函式結束後不收回,造成記憶體洩漏。
char c="hello world";//分配乙個區域性陣列,對應記憶體中的棧,函式返回後不應該再訪問;
char *c="hello world";//分配乙個全域性變數,但是是靜態儲存區
*c='t';//是會發生錯誤的
C C 知識回顧 Lambda
它是第十乙個希臘字母,乙個擁有失意 無奈 孤獨 低調等含義的流行符號,也指示一款稱為 半條命 的遊戲。不過,這次我所講的是 c 中的 lambda。lambda 表示式,是一種簡化的匿名函式,可用於建立委託或表示式目錄樹。其次,你也可以將 lambda 表示式作為引數進行傳遞,或者將它作用於函式呼叫...
C C 知識回顧(二) Sizeof
1.指標大小為4個位元組 2.結構體內的元素長度都小於處理器的位數的時候,以最長的資料元素作為對齊單位 如果結構體內存在長度大於處理器位數的元素,那麼就以處理器的位數為對齊單位 3.注意位址對齊 4.static 靜態變數存放在全域性資料區,sizeof不會計算它。5.char s 01234567...
指標 C C 指標相關知識
提到指標,需要聯絡到計算機的記憶體等相關的知識,這類理論知識我就不過多闡述了,可能比較枯燥,我會以實踐為主來分析指標。但有沒有發現,字串型別也就是字元陣列的輸入,為什麼不用加這個 符號就可以呢?include include using namespace std intmain int argc,...