C语言指针数组与数组指针

C语言指针一向较难,上学期遇见这两个名词更是一脸懵逼,一直说写博客老忘记,今天补上。
指针数组
首先它是一个数组,只不过数组中元素数据结构为指针类型,这个比较好理解
声明方式为 * p[ ]; 这个比较好记,[ ]优先级比 * 高,所以先是数组再是指针,所以是指针数组(好勉强的解释,不过很好记,如果要用的话,先写出来会更好理解)

#include<stdio.h>
int main()
{
    int *p[2];           //定义指针数组 
    int a[2][3] = {{1,2,3},{4,5,6}};   //定义一个二维数组 
    p[0]=a[0];   //将二维数组中第一行首地址赋给指针数组中元素 p[0] 
    p[1]=a[1];   //将中第二行首地址赋给指针数组中元素 p[1]
    printf("%d\n",*p[0]);  //输出p[0]地址所指向的值 
    printf("%d\n",*p[1]);  //输出p[1]地址所指向的值
    return 0;
}

结果
这里写图片描述

p[0]=a[0];
p[1]=a[1];
a[0]和a[1]分别是指向两个一维数组的指针,也就是说p[2]这个指针数组存的是两个一维数组的首地址,并且也代表了两个一位数组,只不过a[0]和a[1]真正的值是a[0][0]和a[1][0]的地址,所以输出就是两个一维数组的第一个元素

数组指针
和上面一样,首先它是一个指针,只不过是指向一个数组的指针,声明方式为(*p)[ ];这个也好记,括号优先级虽然和[ ]相同,但结合方向是由左向右的,所以先是(*p)说明是一个指针,然后是[ ]表示为一个数组,所以是数组指针

#include<stdio.h>
int main()
{
    int (*p)[3];           //定义数组指针 
    int a[2][3] = {{1,2,3},{4,5,6}};   //定义一个二维数组 
    p=a;   //a指向的是a[0][3]这个一维数组,将a赋给p 
    printf("%d\n",**p);   //输出p指向二维数组第一行的第一个值 
    printf("%d\n",**(p+1));  //输出p指向二维数组第二行第一个值
    return 0;
}

结果
这里写图片描述

这里的赋值和取值理解同上,完全与指针数组赋值语句的理解相同,只不过上面的解释更适用于这里,更易理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值