指標定義:指標是乙個變數,儲存的內容為位址。
int num = 5;
如果系統分配給num的空間為0x1000到0x1003 num的位址就為首位元組位址0x1000。0x1000內儲存的內容為5。
定義指標p
int* p = #
指標p內儲存的內容為num的位址,如果系統給p分配的位址為0x2000,可以得到下圖
指向記憶體空間和對應的記憶體空間:
num++:對num對應的記憶體空間的值加1.
p++:對p對應的記憶體空間的值加1.
(*p)++:對p指向的記憶體空間加1.
『 * 』為取值運算子,根據對應記憶體空間裡儲存的位址找到其對應的記憶體空間。
p == &num
*p == num == *(&num)
int *pp = &p;
num == *p == **pp ==*(&num)
p == *pp == &num
int* ppp = &pp;
**ppp == *pp == p == &num
***ppp == **pp == *p == num =*(&num)
int *p; 定義為指標型別為int* 指向int
char *p; 定義為指標型別為char* 指向char
野指標:隨機指向一塊記憶體的指標,有可能導致記憶體洩漏。
記憶體洩漏:訪問一塊不可訪問或已經釋放的記憶體。
int *p;
scanf("%d",p);
printf("%d",*p);
這裡雖然定義了指標,但是未對其進行初始化,系統對未初始化的區域性變數分配乙個隨機的值,所以p指向乙個隨機的位址,而這個位址系統不一定分配給使用者,使用者不一定有使用許可權,或者有使用許可權但已經釋放,如果使用此指標就有可能造成記憶體洩漏。
避免野指標需要給指標賦初值值
int * p = (int * )malloc(sizeof(int))
;int * p = null;
指標知識點
1 一級指標 int p 2 二級指標 int p 3 多級指標 int p etcconst int p 指標常量 指標是乙個常量,必須初始化 int const p null 5 陣列指標和指標陣列 陣列指標 對二維陣列進行操作 int p n 陣列指標 儲存指標型別的陣列 int p n 6 ...
C 知識點 指標
指標就是給數值分配乙個在記憶體中的空間,然後訪問是不用直接訪問數值,而是訪問那個位址,就可以讀取到那個數值,這樣可以做到不能修改數值。通過指標,可以簡化一些 c 程式設計任務的執行,還有一些任務,如動態記憶體分配,沒有指標是無法執行的。指標的本質是變數,可以是各種資料型別,定義乙個指標 ip 其中 ...
函式指標知識點
cout hello endl typedef int funcptr int a,int b funcptr funcptr funcptr add int res funcptr 4,3 int res funcptr 4,3 這兩種方法都可以,但是我覺得第一種方法更好,更符合指標的引用方式 c...