指针数组&数组指针

申明的区分:

指针数组的申明:

int *np[COL];

从操作符的优先级来看,np先与[ ]结合再与*结合,不难看出np是个数组名且其成员是一个指向int数据的指针。

数组指针的申明:

int (*p)[COL];

从操作符的优先级来看,先与*结合再与()结合最后与[ ]结合,易知p是个指针且其指向一个具有COL个成员的数组。因为p是指向数组的,因此p++的步长

是数组的长度。

  具体区别及应用请看一下代码:

#include <stdio.h>
#include <stdlib.h>
#define COL 5
#define ROW 4

int main()
{
    int matrix[ROW][COL];
     int (*p)[COL]; //数组指针
     int *np[COL];  //指针数组
       int i,j;
     for(i=0;i<ROW;i++)
    {
        for(j=0;j<COL;j++)
            matrix[i][j]=i*10+j;
        }

           p=matrix;//这是允许的!因为p、matrix都是指向数组的指针。
           for(i=0;i<ROW;i++)
           {
                for(j=0;j<COL;j++)
                     printf("%02d  ",*(*(p+i)+j));//*(*(p+i)+j) <=> matrix[i][j]
                printf("\n");
       }

           printf("\n");

           for(j=0;j<COL;j++)
           np[j]=matrix[0]+j; //np数组的每个成员都是指针。将matrix[0][j]的地址赋给np[j],即np存储的是第一行所有元素的地址
           for(j=0;j<COL;j++)
           printf("%02d  ",*np[j]);//对第一行元素进行访问

           printf("\n");
           return 0;

        }

运行结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值