C语言:使用指针操作二维数组

任务代码:

(1)用指向二维数组元素的指针:

#include <stdio.h>
int main( )
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int *p;
    for(p=a[0];p<a[0]+12;p++)
    {
        printf("%3d ",*p);
    }
    return 0;
}


(2)数组指针:指向一维数组的指针变量

#include <stdio.h>
int main( )
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int i,j,(*p)[4];//定义一个指向有四个元素的一维数组的指针
    
    for(p=a,i=0;i<3;i++,p++) //i用于计算行数
    {
        for(j=0;j<4;j++)
        {
           printf("%3d ",*(*p+j));//!!尤其注意,这里的p存储的是a行整体的地址指向一维数组a[0]整体,而不是指向一个具体的值!
                                  //*p的值取出来的值就是a[0][0]的地址,*p+j就是存储a[0][j]行的地址,
                                  // *(*p+j)就是该地址指向的元素的值!!
        }
        printf("\n");
    }
    return 0;
}



第二种写法:(含义不同)

#include <stdio.h>

int main( )
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int i,j,(*p)[4];
    
    p=a[0];//p存储a[0]行整体的地址,*p指向a[0]一维数组整体
    
    for(i=0;i<3;i++) //i用于计算行数
    {
        for(j=0;j<4;j++)
        {
            printf("%3d ",*(*(p+i)+j));//p指向一维数组整体,(p+i)代表指向每一行的一维数组,
                                       //*(p+i)取值代表每一行一维数组第a[i][0]个元素的地址
                                       //*(p+i)+j代表每一行a[i][j]的地址
                                       //*(*(p+i)+j)代表a[i][j]的值
        }
        printf("\n");
    }
    return 0;
}


(3)指针数组:

#include <stdio.h>

int main( )
{
    int b[2][3]={{1,2,3},{2,4,6}};
    int *pb[2];
    
    int i,j;
    pb[0]=b[0];//pb[0]存储b[0]行一维数组首元素b[0][0]地址,*pb指向b[0]首元素
    pb[1]=b[1];//pb[1]存储b[1]行一维数组首元素b[1][1]地址,*pb指向b[1]首元素
    
    for(i=0;i<2;i++)//用于记录行数
    {
        for(j=0;j<3;j++,pb[i]++)//pb[i]++代表在b[i]行的基础下,访问b[i][j]元素的值
        {
            printf("%2d ",*pb[i]);
        }
    }
    
    
  return 0;
}


知识总结:

(1)用指向二维数组元素的指针:



(2)数组指针:指向一维数组的指针变量!

         数组指针是一个指针,但是指向的不是一个元素,而是指向一维数组整体!



例子1(第一种写法):



例子2(第二种写法):



(3)指针数组:(注意区别与数组指针的不同)



指针数组去访问二维数组;


  • 24
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值