指標與陣列的關係(一維、二維)
阿新 • • 發佈:2019-01-01
一、指標和一維陣列間的關係
前提條件:
int a[10];//元素個數隨意自己定
int *p = a;//定義指標時直接初始化,也可以分為兩步:int *p; p=a;
第i個元素的地址:
&a[i] 等價於 a+i 等價於 &p[i] 等價於 p+i
第i+1個元素的值:
a[i] 等價於 *(a+i) 等價於 p[i] 等價於 *(p+i)
二、指標和二維陣列間的關係
前提條件:(對於二維陣列)
int a[2][3];//2行3列 行地址: a表示二維陣列的首地址,第0行的地址 a+i代表第i行的地址,但並非增加i個位元組 列地址: a[i] 或 *(a+i) 代表第i行第0列的地址 a[i]+j 或 *(a+i)+j 或 &a[i][j] 代表第i行第j列的地址 行指標指向的內容: *(*(a+i)+j) 或 a[i][j] 代表第i行第j列的內容 列指標指向的內容: *(a+i*n+j) 或 a[i*n+j] 或 a[i][j] 代表第i行第j列的內容
二維陣列的行指標:(逐行查詢,逐列查詢)
#include <iostream>
using namespace std;
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int (*p)[3];//(*p)[i]:是定義一個指向含有i個元素的陣列的指標,不過要注意,這裡“i”應該是一個常量
//*p[i]:定義元素型別是指標的陣列,同樣的“i”應該是整型
p=a;//用行地址初始化
for(int i=0;i<2;++i)
{
for(int j=0;j< 3;++j)
cout<<*(*(p+i)+j)<<" ";
cout<<endl;
}
return 0;
}
二維陣列的列指標:(逐個查詢,相對偏移量)
#include <iostream>
using namespace std;
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int *p;
p=*a;
for(int i=0;i<2;++i)
{
for(int j=0;j< 3;++j)
cout<<*(p+i*3+j)<<" ";
cout<<endl;
}
cout<<endl;//另外一種表示方法
for(int i=0;i<2;++i)
{
for(int j=0;j<3;++j)
cout<<p[i*3+j]<<" ";
cout<<endl;
}
return 0;
}