C 指標學習筆記

2021-08-18 12:54:13 字數 1556 閱讀 6674



例:int變數 updates;指標變數 p_updates

updates表示值,&updates表示位址; p_updates表示位址,* p_updates表示指標所指向的值。

所以&updates=p_updates,updates=* p_updates

指標的初始化:

int *p_updates

表明* p_updates的型別為int,由於*運算子被用於指標。我們說p_updates指向int型別,我們還說 p_updates是指向int的指標,或int*。因此p_updates是指標位址,而* p_updates是int,而不是指標。

int *p_updates=&updates;

指標的危險:

在建立指標時,計算機將分配用來儲存位址的記憶體,但不會分配用來儲存指標所指向的資料記憶體。

如:long *fellow;

*fellow=23333;   //沒有位址賦給指標fellow

使用new來分配記憶體:

在執行階段分配未命名的記憶體以儲存值,通過指標來訪問記憶體。

int *pn=new int;//如果值沒有名稱則只能通過給他開闢新的記憶體空間直接通過指標來訪問

*pt=1001;

使用delete釋放記憶體:

delete pt;//釋放指標所指向的記憶體但不會刪除指標變數本身,所以可以給他重新分配記憶體空間。

使用new來建立動態陣列:

動態聯編:

編譯時分配記憶體空間

靜態聯編:

執行時如果需要陣列則建立陣列若不需要則不建立,還可以選擇陣列的長度(動態陣列)。

int *psome=new int[10];//建立

delete psome;//釋放動態陣列

new運算子返回的是第乙個元素的位址,該位址被賦給指標psome。

指標算術:指標變數+1表明指向他後面的元素,增加的量等於指向的型別的位元組數。

指標和字串例題**:

#include

#include

int main()

strcpy()和strncpy()的比較:

strcpy(a,b)當被複製的字串長度大於儲存的長度,會出現錯誤,可能覆蓋程式正在使用的記憶體。

strncpy(a,b,c)可以指定複製過去的字元數c。

使用new建立動態結構:

例題:#include

struct inflatable   

//定義結構體

;int main()

自動儲存、靜態儲存和動態儲存

自動儲存:

自動變數(區域性變數,通常儲存在棧中先進先出)在函式內部定義的常規變數使用自動儲存空間,在函式呼叫時自動產生在函式結束時消亡。

靜態儲存:

整個程式執行期間都存在的儲存方式

定義靜態變數的方式:1.函式外定義;2.使用關鍵字static

double free=1;

動態儲存:管理乙個記憶體池被稱為自由儲存空間(free store)或堆(heap)。用new,delete來進行記憶體分配和釋放,為了防止記憶體洩漏一定要同時使用new和delete。

C 學習筆記 this指標

先從c語言結構體初始化的例子來說明this指標。定義乙個結構體,並對其實例進行初始化。include includeusing namespace std struct student void initstudent name,name st age age strcpy st main 在ini...

C 學習筆記(指標)

字串是以 n 作為終止符的,所以字元陣列的大小比單詞的字元數多乙個。每乙個變數都有乙個記憶體位置,每乙個記憶體位置都定義了可使用連字型大小 運算子訪問的位址,他表示了記憶體的乙個位址。什麼是指標 指標是乙個變數,其值為另乙個變數的位址,既記憶體位置的直接位址。就像其他變數或常量一樣,必須使用指標儲存...

C 學習筆記 指標

1 基本概念 作用 可以通過指標直接訪問記憶體 2 定義和使用 定義指標 他們的關係就是這樣的 執行輸出 使用指標 執行輸出會發現變數a的值也一起改變了,這是因為在記憶體中 p和a都是乙個記憶體位址 3 指標所佔記憶體空間 在32位作業系統下占用4個位元組,64位下佔8個位元組 4 空指標和野指標 ...