目錄
一、電腦程式在儲存資料時的三要素
二、記憶體的四個區
三、指標變數的3個基本定義
四、指標的宣告與初始化
五、指標的危險
六、指標的四種運算
七、指標與多維陣列
八、指標的引用
九、動態分配記憶體
十、指標和函式(陣列和函式)
十一、指標和const
野指標:不能明確指向的指標變數
空指標:void* 可以先這麼定義然後轉換成其它的資料型別
warning:一定要在對指標應用解除引用運算子』 * '之前,將指標初始化為乙個確定的、適當的位址。
/*使用錯誤,23333不是乙個已經分配了記憶體空間的變數,int* 型別的指標ptr只是乙個儲存位址的4b空間
/int ptr;
ptr = 23333;
/定義void* 型別指標ptr,賦值 a 的位址,然後將 void* 型別轉化為 int* 型別的指標並通過
解除引用運算子『*』進行數值輸出
/#include
#include
using namespace std;
int main()
六、指標的四種運算
指標只有四種運算:』 + 『、』 - 『、』 ++ 『、』 – ',偏移。
指標變數的加減,以指標所指向的型別空間為單位進行偏移。
例如:char* ptr; char的大小是 1b,因為 ptr 的型別為 char*,所以 ptr+1 的偏移量是 1b
int* ptr; int的大小是4b,因為 ptr 的型別為 int*,所以 ptr+1 的偏移量是 4b
double* ptr; double的大小是8b,因為 ptr 的型別是 double*,所以 ptr+1 的偏移量 8b
#include
#include
using namespace std;
int main()
;// 陣列名表示首位址
cout<< "a= "<< int(a)<< endl;
cout<< "a+1= "<< int(a+1)<< endl;
// 對陣列進行取位址 &,得到的並不是陣列的首位址,而是整個陣列,也就是 int(*)[5]
cout<< "&a = "<< int(&a)<< endl;
cout<< "&a+1 = "<< int(&a+1)<< endl;
return 0;
輸出:
a = 2686684
a+1 = 2686688 // 首位址a[0],故而a的型別是int*,所以a+1增加4b
&a = 2686684
&a+1 = 2686704 // &a的型別是int(*)[5],所以&a+1增加4x5=20b
七、指標與多維陣列
int a[1][2][3][4][5][6][7][8];
多維陣列:從高維到低維拆
&a 8維 int()
a 7維 int()
a 6維 int()
a 5維 int()
a 4維 int()
a 3維 int()
a 2維 int*
a 1維 int
八、指標的引用
下標法 a[m][n]
指標法 *(a[m] + n) 或者 ((a + m) + n)
九、動態分配記憶體
c++的new運算子,將找到一塊長度正確的記憶體塊,並返回該記憶體塊的位址。
int* p = new int; // 分配乙個int大小的空間
char* p = new char; // 分配乙個char大小的空間
int* p = new int[32]; // 分配乙個長度為32的int陣列的空間
char* p = new int[32][32]; // 分配乙個大小為32x32的char二維陣列的空間
delete p; // 釋放空間
delete p; // 釋放陣列空間
new和delete要搭配使用。使用new運算子在自由儲存空間(或者堆)上建立變數之後,沒有呼叫delete,即使包含指標的記憶體由於作用域規則和生命週期的原因被釋放,但是在自由儲存空間上動態分配的變數或者結構依然存在。
十、指標和函式(陣列和函式)
/*get_variable函式和show_arr函式中的第乙個引數 int arr和int* arr都表示arr是乙個
int型別的指標
*/#include
#include
using namespace std;
void get_variable(int arr, int length)
}void show_arr(const int* arr, int length)
cout<< endl;
}int main()
{int arr[5];
get_variable(arr, 5);
show_arr(arr, 5);
return 0;
C 指標陣列與陣列指標
說實話,c語言真的很讓人蛋疼,它不像物件導向的語言,我們重心在設計程式上。而使用c語言,你不僅要考慮程式的設計,你還要考慮很多他的使用細節,不然一不小心你怎麼死的都不知道。但是,個人感覺,c語言的魅力是其他任何語言都比不了的!繼續看。陣列指標 範例 typedef int aint5 5 typed...
C 指標陣列與陣列指標
陣列指標 也稱行指標 陣列指標 a pointer to an array,即指向陣列的指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣...
指標陣列與陣列指標 C
關於陣列指標 1 對於二維陣列,初始化時,必須指定乙個引數 int a 3 int a 這樣是不允許的,因為要確定指標移動一步要走多遠。對於一位陣列int a 這樣可以。也就數說只有乙個引數位置可以不用設定引數。2 int p 3 必須加上小括號,這代表乙個指向陣列的指標,數字3,代表每一列有三個數...