C C 知識回顧 指標

2021-07-27 08:36:40 字數 1062 閱讀 9146

(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,...