关闭

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

标签: 指针多维数组c
332人阅读 评论(0) 收藏 举报
分类:
   问题描述: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,
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:243075次
    • 积分:3784
    • 等级:
    • 排名:第8526名
    • 原创:287篇
    • 转载:16篇
    • 译文:0篇
    • 评论:18条
    最新评论