對於指標的理解

2021-10-02 15:09:13 字數 2048 閱讀 9239

就是記憶體中間開闢了一塊區域存放資料的位址,這個位址就叫做指標

指標的定義服從必須的格式:

整型資料:

int *p = &a;
陣列:

int *p = arr;
這樣就使得p存放了資料的位址(可以理解為p=0x0000)

當涉及到指標與函式的時候

#includeusing namespace std;

void swap01(int a, int b)

void swap02(int *p1, int *p2)

int main7() //注意乙個專案中main函式不能重名

swap02(&a, &b); 是傳入兩個資料的位址,在函式定義的時候,void swap02(int *p1, int *p2) ,得用指標去接,int *p1 則是指標的宣告必須遵循的資料格式。**注意,p的解引用與int p無關。

注意,陣列的指標很有意思。

int * p= arr;

這樣p就存放了arr的首位址,而不需要&。

#includeusing namespace std;

//氣泡排序函式,大的在後面

void bubblesort(int *arr, int len)

} }}// 列印陣列函式

void printarray(int *arr, int len)

}int main() //注意乙個專案中main函式不能重名

; // 獲取陣列長度

int len = sizeof(arr) / sizeof(arr[0]);

//cout << len << endl;

bubblesort(arr, len);

printarray(arr, len);

system("pause");

return 0;

}

在定義函式的時候,為了接arr的位址,需要 void bubblesort(int *arr, int len)

那麼在函式定義的程式段中,

arr[1]這種形式可以直接使用,因為函式定義中,括號裡面 int *arr 表示arr是個指標,別忘了那句話,

那麼arr就是存放陣列的首位址,那麼就可以直接使用arr[1]這種形式訪問陣列中元素。

#includeusing namespace std;

int *func2()

// 1.new的基本語法

void test01()

// 2.new在堆區開闢陣列

void test02()

for (int i = 0; i < 10; i++)

// 如果想釋放堆區的陣列,利用關鍵字delete

delete arr;

}int main() //注意乙個專案中main函式不能重名

詳細看:

int *func2()

這個函式返回了乙個指標,也就是乙個位址資料。

這個位址由new int開闢於堆區,存放了堆區資料。

下面用int *p = func2();

來接。因為int *是指標宣告的必要形式

那麼對於陣列來說

void test02()

for (int i = 0; i < 10; i++)

// 如果想釋放堆區的陣列,利用關鍵字delete

delete arr;

}

用new int[10]建立了乙個堆區十元素陣列,並將arr指標指向他,也就是arr存放這個陣列的首位址。

那麼既然是陣列的首位址,自然可以直接arr[1]這種形式直接進行呼叫陣列中的每個元素啦。

最後,要記住

對於各種指標的理解

在定義指標變數時,用 type 的方式 例如 int p char ch 說明一點,和變數名沒關係,也可以寫成如下風格,單獨的p和ch叫做指標變數 int p char ch 乙個指標只能指向與它型別相同的型別 如下 int a 0 int p a char ch a char q ch int p...

對於c指標 的理解

對於乙個指標型別的變數int p,其指類 指類 其所指向的空間的資料型別 為int,並且假設其定義 在乙個主函式中 定義在任意函式中都行 若在其前面加乙個 符並且將這個 p傳遞到乙個自己定義的函式 中,也就是將實參 p傳到乙個函式中去 其本質是將p的首位址取出來,作為實參傳到函式中去,形參head ...

對於指標學習的理解

在最近的一段時間裡,我c語言的學習也即將接近尾聲,在這裡我想對指標的學習寫下自己的一點看法和理解,不夠全面也不是完全正確,但我希望這作為我對這段時間學習的一次總結。指標的概述 指標是一種變數型別,它與普通變數不同的是,指標裡存的是位址,指向另一變數,起到索引的作用。我所理解的指標具備三要素 1.指標...