遍历二维数组 方法: 数组指针 又叫行指针

1.数组指针的本质:本质是指针,只是该指针指向的内容是数组。

2.数组指针的形式

        存储类型    数据类型  (*数组指针变量名) [列数];

eg:   int  (*p)  [10];   //定义了数组指针p ,其中p指针指向有10个int型元素的一维数组

此时如果进行  p+1   操作的话则:

 p+1;    //向地址大的方向偏移1个数据类型;

eg2:
        int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //初始化二维数组
        int (*p)[4] = a;    //初始化数组指针
        int (*q)[4]; //先定义数组指针,再去赋值
        q = a;

3.用数组指针输出二维数组的值并且求二维数组中各个元素的和

源代码

#include<stdio.h>
int main()
{
 int a[3][4]={{1,2,3,4},{5,6,7,8,},{9,10,11,12}};
 int *q=&a[0][0];   //&a[0][0]等价于a[0]
 int (*p)[4]=a;		//初始化数组指针 注意: 数据类型  (*数组指针变量名) [列数]
 int h,l,sum=0;
 int sum1=0,sum2=0,sum3=0;
 //用指针遍历二维数组
 putchar('\n');
 puts("用指针遍历二维数组:\n");
 for(h=0;h<12;h++)
  {
    printf("%d  ",*q);
    q++;
  }

 putchar('\n');
 puts("用数组指针遍历二维数组:\n");
 for(h=0;h<3;h++)
  for(l=0;l<4;l++)
	{
	 printf("%d",p[h][l]);
	 //a[h][l],p[h][l],*(*(a+h)+l),*(*(p+h)+l) 这几个表达式等价
	}	
puts("用数组指针求二维数组的和:\n");
 for(h=0;h<3;h++)
  for(l=0;l<4;l++)
	{
	  sum+=p[h][l];
	  sum1+=a[h][l];
	  sum2+=*(*(a+h)+l);
	  sum3+=*(*(p+h)+l); // 
	}	
	 //sum,sum1,sum2,sum3 等价
	 printf("sum=%d sum1= %d  sum2=%d sum3= %d\n",sum,sum1,sum2,sum3);

 return 0;
}

4.结论:
        二维数组中第h,l个元素的表示:(h为行:0,1,...   l为列:0,1,....)
            a[h][l] p[h][l]  *(*(a+h)+l)   *(*(p+h)+l)

        二维数组中第h,l个元素的地址表示:(h为行:0,1,...   l为列:0,1,....)
            &a[h][l]  &p[h][l]  *(a+h)+l    *(p+h)+l

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值