c 陣列與指標

2021-10-22 19:04:00 字數 2568 閱讀 3357

目錄

一、電腦程式在儲存資料時的三要素

二、記憶體的四個區

三、指標變數的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,代表每一列有三個數...