C++ 指標陣列與陣列指標的區別
/* 指標陣列和陣列指標的區別 */
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
/* 熱身,首先看看一維陣列 */
int arr[3] = {1,2,3} ;
int *arr_p = arr ; //這裡直接宣告一個指標,指向一維陣列的首地址即可
cout << "以下為熱身的一維陣列:" << endl ;
for(int i = 0 ; i < 3 ; ++i) //遍歷陣列
cout << arr_p[i] << " " ;
cout << "\n\n/*-------------分--割--線-------------*/\n\n" << endl ;
/*----------------------------------分----割----線---------------------------------*/
/* 重點,下面講講二維陣列 */
int arr2Dim[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11} ; //定義並初始化
/* 首先是 陣列指標,可以理解為“指向陣列的指標”,主語是“指標”,便於記憶與區分 */
int (*arrPtr)[4] ; /* arrPtr是指標,可以理解為指向一維陣列,每個一維陣列有4個int元素 */
/* 以下為兩種不同的初始化方式 */
//arrPtr = arr2Dim ;
arrPtr = &arr2Dim[0] ;
cout << "以下利用 陣列指標 輸出的二維陣列:" << endl ;
for(int i = 0 ; i < 3 ; i++ )/*輸出二維陣列中各個元素的數值*/
{
for(int j = 0 ; j < 4 ; j++ )
{
/* 以下為兩種不同的輸出方式 */
cout << *(*(arrPtr+i)+j) << " " ;
//cout << (*arrPtr+i*sizeof(int))[j] << " " ;
}
cout << endl ;
}
cout << endl ;
cout << "\n\n/*-------------分--割--線-------------*/\n\n" << endl ;
cout << "以下有助於理解陣列指標的儲存:" << endl ;
cout << "arrPtr[0] = " << arrPtr[0] << " | " << "arrPtr[1] = " << arrPtr[1]
<< " \n"<< "arrPtr[2] = " << arrPtr[2] << " | "<< "arrPtr[3] = " << arrPtr[3] << endl ;
cout << "arrPtr = " << arrPtr << endl ;
/* *arrPtr表示arrPtr所指向的陣列 */
cout << "arrPtr = " << *arrPtr << endl ;
/* (* arrPtr)[i] 會返回陣列的第 i+1 個元素值 */
cout << "(*arrPtr)[0] = " << (*arrPtr)[0] << " | "<< "(*arrPtr)[1] = " << (*arrPtr)[1]
<< " \n"<< "(*arrPtr)[2] = " << (*arrPtr)[2] << " | "<< "(*arrPtr)[3] = " << (*arrPtr)[3] << endl ;
/* (* arrPtr)[i] 是等價於 *((*arrPtr) + i) 的,因此當i=0時,表示陣列第一個元素的值 */
cout << **arrPtr << endl ;
/* *arrPtr+1則是(*arrPtr)[1]這個元素的地址,所以輸出的是(*arrPtr)[3]這個元素 */
cout << *(*arrPtr+3) << endl ;
/* 經過 arrPtr++ 語句,由於 arrPtr 是陣列指標,後來arrPtr中存放的地址應該是*arrPtr+sizeof(arr2Dim[0]) */
arrPtr++;
cout << "\narrPtr++之後\n" << endl ;
cout << "arrPtr[0] = " << arrPtr[0] << " | " << "arrPtr[1] = " << arrPtr[1]
<< " \n"<< "arrPtr[2] = " << arrPtr[2] << " | "<< "arrPtr[3] = " << arrPtr[3] << endl ;
cout << "arrPtr = " << arrPtr << endl ;
cout << "arrPtr = " << *arrPtr << endl ;
cout << "(*arrPtr)[0] = " << (*arrPtr)[0] << " | "<< "(*arrPtr)[1] = " << (*arrPtr)[1]
<< " \n"<< "(*arrPtr)[2] = " << (*arrPtr)[2] << " | "<< "(*arrPtr)[3] = " << (*arrPtr)[3] << endl ;
cout << "**arrPtr = " << **arrPtr << endl ;
cout << "*(*arrPtr+3) = " << *(*arrPtr+3) << endl ;
cout << "\n\n/*-------------分--割--線-------------*/\n\n" << endl ;
/*----------------------------------分----割----線---------------------------------*/
int *ptrArr[3] ; /* 指標陣列,含有3個int指標,也就是說每一個元素都是指標 */
/* 以下例子可以幫助理解,parr 的元素內容都是地址 */
int n1 = 10;
int n2 = 20;
int* parr[2] = { &n1 , &n2 };
//cout << *(parr[0]) << " " << *(parr[1]) <<endl; /* 輸出10 20 */
int **p2p=parr; /* 上面分析,型別一致 */
/* 通過以下方式賦值 */
for(int i = 0 ; i < 3 ; i++)
ptrArr[i] = arr2Dim[i] ;
cout << "以下利用 指標陣列 輸出的二維陣列:" << endl ;
for(int i = 0 ; i < 3 ; i++ )
{
for(int j = 0 ; j < 4 ; j++ )
{
/* 以下為兩種不同的輸出方式 */
cout << ptrArr[i][j] << " " ;
//cout << *(ptrArr[i]+j) << " " ;
}
cout << endl ;
}
cout << endl ;
return 0;
}
以下為輸出結果:
以下為熱身的一維陣列:
1 2 3
/*-------------分--割--線-------------*/
以下利用 陣列指標 輸出的二維陣列:
0 1 2 3
4 5 6 7
8 9 10 11
/*-------------分--割--線-------------*/
以下有助於理解陣列指標的儲存:
arrPtr[0] = 0012FED0 | arrPtr[1] = 0012FEE0
arrPtr[2] = 0012FEF0 | arrPtr[3] = 0012FF00
arrPtr = 0012FED0
arrPtr = 0012FED0
(*arrPtr)[0] = 0 | (*arrPtr)[1] = 1
(*arrPtr)[2] = 2 | (*arrPtr)[3] = 3
0
3
arrPtr++之後
arrPtr[0] = 0012FEE0 | arrPtr[1] = 0012FEF0
arrPtr[2] = 0012FF00 | arrPtr[3] = 0012FF10
arrPtr = 0012FEE0
arrPtr = 0012FEE0
(*arrPtr)[0] = 4 | (*arrPtr)[1] = 5
(*arrPtr)[2] = 6 | (*arrPtr)[3] = 7
**arrPtr = 4
*(*arrPtr+3) = 7
/*-------------分--割--線-------------*/
以下利用 指標陣列 輸出的二維陣列:
0 1 2 3
4 5 6 7
8 9 10 11
參考連結:
相關文章
- 指標陣列與陣列指標指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- 陣列指標,指標陣列陣列指標
- 指標陣列和陣列指標與二維陣列指標陣列
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 陣列指標陣列指標
- 二維陣列與指標陣列指標
- 陣列地址與指標之間的區別與聯絡陣列指標
- C語言 指標與陣列C語言指標陣列
- C陣列和指標陣列指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- c程式設計--指標與陣列C程式程式設計指標陣列
- 陣列,函式與指標 詳解陣列函式指標
- 透過指標引用陣列指標陣列
- 字串指標與字元陣列的區別--字串常量的值不能改字串指標字元陣列
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 二維陣列的指標的理解陣列指標
- 指標陣列練習排列字串指標陣列字串
- 3-6指標與陣列的天生姻緣指標陣列
- c語言-運算子,陣列,指標C語言陣列指標
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- 【C進階】28、指標和陣列分析指標陣列
- 日常學習儲存--陣列和指標陣列指標
- 【C】 28_指標和陣列分析(上)指標陣列
- 關於二維陣列指標的問題陣列指標
- C指標和陣列的關係詳解指標陣列
- 物聯網學習教程— 多維陣列與指標陣列指標
- sizeof和strlen計算陣列型別和指標型別字串陣列型別指標字串
- (C語言)使用指標列印陣列的內容C語言指標陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- C----陣列越界問題、指標入門陣列指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- C++語言程式設計筆記 - 第6章 - 陣列、指標與字串C++程式設計筆記陣列指標字串
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- LeetCode合併兩個有序陣列(逆向雙指標)LeetCode陣列指標
- 要點1:指標、陣列和複合字面量指標陣列
- 物件陣列與一般陣列的區別物件陣列
- 指標常量和常量指標的區別指標
- 資料結構與演算法基礎之指標和陣列資料結構演算法指標陣列