就是記憶體中間開闢了一塊區域存放資料的位址,這個位址就叫做指標
指標的定義服從必須的格式:
整型資料:
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.指標...