您的位置:首页 > 其它

[Pointer]C中指针与多维数组学习

2015-07-11 00:18 260 查看
问题描述:C中指针的用法非常灵活,合理使用指针可以避免副本拷贝等。多维数组与指针的结合使用有时可以带来许多方便。
指针处理多维数组的行:这个处理相对简单,以二维数组为例,
int a[ROW][COL]={};
int *p;
要用p指向a的某一行,使用p=a[i]即可。
指针处理多维数组的列:比行处理稍复杂,因为数组是按行存储而非列。以二维数组为例,

#include <stdio.h>

int main(void) {
int a[3][4]={0};
int i,j;
int (*p)[4];
for(p=a;p<=&a[2];p++)
(*p)[2]=8;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d, ",a[i][j]);
return 0;
}

运行结果:

0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0,


这里用到了数组指针,int(*p)[4];为一个指向长度为4的一维数组的指针,二维数组a[3][4]的每一行都是长度为4的一维数组,因此可以将数组指针指向每一行的地址,然后用(*p)[2]=8;为指向的一维数组的第三个元素赋值8,这样即实现了对二维数组的列的操作了。
多维数组名与指针:以二维数组为例,如a[ROW]{COL},数组名a此时是指向指针的指针,多维数组的理解可以参照一维数组,此时可将a看成是一个一维数组,但是每个元素也是一个一维数组,因此a就是指向其第一个一维数组元素的指针,即(*)[COL],此时(*a)[0]就是a[0]了:

#include<stdio.h>

int main(void)
{
inti,j;
inta[3][4]={0};
int(*p)[4];

//二维数组初始化
for(p=a;p<=a+2;p++)
for(i=0;i<4;i++)
(*p)[i]=i;

//二维数组打印
for(p=a;p<=a+2;p++)
for(i=0;i<4;i++)
printf("%d, ",(*p)[i]);

//打印**a
printf("\n **a %d\n",**a);

//利用数组名作为指针打印数组元素
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d, ",*(*(a+i)+j));
}

运行结果:

0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,

**a 0

0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: