关于数组以为指针二维指针的应用举例

 

     事实上,计算机系统的多维数组其实最终还是以一维数组的形式实现的。就N x M的二维数组来讲,设其数组名为array。指针array指向一个数组,该数组存放的是一系列指针,这些指针分别指向相应的一维数组,而这些数组中存放的才是我们的数据。

    

由此array

是第i个指针变量地址,array[j]则表示相对于第i个指针变量偏移j*sizeof(数组类型)。系统通过这种机制访问了该二维数组的第i行,第j列的内容。有上述可知,指向二维数组的指针其实是指向“指针变量地址”的指针变量。所以在声明指向二维数组的指针时,用int ** array的形式。

int main(){
int a[N][N];
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
a[i][j]=i*N+j;
}
}
for(int i=0;i<N;i++)
cout<<*(*(a+i))<<endl;
}

二维数组实际上是一个二维数组指针,此程序的输出为:0 3 6

int main(){
int a[N][N];
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
a[i][j]=i*N+j;
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){

cout<<*(*(a+i)+j)<<endl;

}
}
}

在这里a就表示指向指针的指针了,此函数按照行优先来遍历整个数组,其实这很好理解,*(a+i)表示的是第i行的首地址,*(a+i)+j表示的是第i行的第j个元素的地址,*(*(a+i)+j)表示第i行第j列这个元素了,于是我们这样就可以遍历整个数组了。这是行优先遍历数组。

int main(){
int a[N][N];
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
a[i][j]=i*N+j;
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){

cout<<*(*(a+j)+i)<<endl;

}
}
}

这是列优先遍历数组。

转载于:https://www.cnblogs.com/weichaohe/p/5894372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值