指针数组

指针数组:由若干个具有相同存储类型和数据类型的指针变量构成的集合。
指针数组通俗易懂的说也就是一堆指针的集合。
int a[2][3]={{8,7,9},{1,3,2}};
int * p[2] ;
p[0]=a[0];
p[1]=a[1];
printf("%d %d %d\n",a[0][1], *(p[0]+1), *(a[0]+1));
return 0;
结果如上
这是三种方式找出数组中某一位置的元素。
1>直接在数组中指定某行某列输出结果。
2>指针指向二维数组的某行开头,移动指针取出数据。
3>二维数组的行数组也就是相对应的列数组的指针,指针移动取数据。
利用一个指针数组处理 一个二维数组,并且求出所有二维数组的和;
代码如下:
int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int *p[4];
int m;
for(m=0;m<4;m++){
p[m]=a[m];
}
int i,j;
int sum=0;
int sum_1=0;
int sum_2=0;
for(i=0;i<4;i++){

for(j=0;j<4;j++){
sum+= * (p[i]+j);
sum_1+= * ( * (p+i)+j);
sum_2+=* ( *(a+i)+j);
}
}
printf(“二维数组总和: %d %d %d”,sum,sum_1,sum_2);
结果如上
这里的 * (p+i)+j相当于把二维数组一维数组化了,先找完一行,然后紧接着找第二行,一次类推,直到找完所有的元素为止。
多级指针:
把一个指向指针变量的指针变量。称为多级指针。
对于指向处理数据的指针变量称为一级指针。
把指向一级指针变量的指针变量称为二级指针变量。
多级指针初始化:int * * q;(二级指针)
int * 是目标类型,*q本身是指针。
代码如下:
int a[2]={11,99};
int *p[2];
int * *q;
p[0]=a;
p[1]=&a[1];
q=p;
printf("%d %d\n",a[0],a[1]);
printf("%d %d\n",*p[0],*p[1]);
printf("%d %d\n",q,(q+1));
return 0;
运行结果如上
可见三种方式都可以取数据。
刚开始在二级指针指向一级指针出出错,我写的q= * p;
q是二级指针,p是一级指针数组的数组名,其实p也就是指向一级指针起始位置的二级指针,所以这里可以直接写成q=p;
**q 其中 *q表示取一级指针数组中第一个元素存取的地址, *( *q)表示继续取一级指针指向的数组中存取的数据。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值