指针数组和数组指针

写在前面

  • 指针数组 *p[n]:是数组,装着指针的数组
  • 数组指针 (*P)[n]:指向数组的指针,是指针
  • 一般用数组首元素的地址标识一个数组
    指针数组

首先看一下指针

  • 可以将指针比作名片,将变量比作一个东西,名片上印上了这个东西的地址。
  • 知道了一个变量对应的指针,就相当于知道了这个东西在的地方,
  • 那么我们就可以拿着这个名片(指针)找到这个东西(变量),然后去对这个东西进行修改(修改变量)
  • 这个东西可以是一个变量,也可以是一个数组,函数或者结构

指针数组

分析

根据优先级来判断:优先级:()>[]>*
数组指针 *P[n]:P[n]表明首先是数组,主体是数组,加上‘ * ’,表明数组里存放着指针。即装着指针的数组

举例
/**
* 指针数组辨析
*/
void Pointer_Array()
{
    int a=1;
    int b=2;
    
    int *Pointer[2]; //数组,可以存放两个指针
    Pointer[0] = &a;
    Pointer[1] = &b;

    printf("&a:          %p\n",&a); //a的地址
    printf("Pointer[0]:  %p\n",Pointer[1]); //a的地址
    printf("&b:          %p\n",&b); //b的地址
    printf("Pointer[1]:  %p\n",Pointer[1]); //b的地址
    printf("*Pointer[0]: %d\n",*Pointer[0]); //Pointer[1]是a的地址,*Pointer[0]就是a的值
    printf("*Pointer[1]: %d\n",*Pointer[1]); //b的值
}

调用结果:
![在这里插入图片描

数组指针

分析

数组指针 (*P)[n]:同样根据优先级来判断。()优先级最高,( * p)表明主体是指针,加上[n],表明这个指针可以指向数组(一般指向首地址),即数组的指针

举例
void Array_Pointer()
{
    int Array[]={1,2,3,4,5};
    int (*Pointer)[5]; //指针,需要指向含有5个元素的数组
    Pointer = &Array;
    //将数组Array的首地址付给Pointer

    //%p输出地址,%d输出十进制整数
    printf("&Array       %p\n",&Array); 
    printf("Pointer      %p\n",Pointer); //Pointer等价于&Array
    printf("Array        %p\n",Array); //数组名就是数组首元素的地址
    printf("*Pointer     %p\n",*Pointer); //*Pointer等价于Array,表示这个数组

    printf("&Array[0]:  %p\n",&Array[0]); //数组首元素的地址
    printf("&Array[1]:  %p\n",&Array[1]); //数组第二个元素的地址
    printf("Pointer[0]: %p\n",Pointer[0]); //数组首元素的地址
    printf("Pointer[1]: %p\n",Pointer[1]); //数组第二个元素的地址
    printf("**Pointer:  %d\n",**Pointer); //*Pointer就是数组Array,即数组组首元素的地址,*(*Pointer)就是取该地址下对应的值,即数组首元素
    printf("*Pointer[0]:%d\n",*Pointer[0]); //数组首元素
    printf("*Pointer[1]:%d\n",*Pointer[1]); //一个没有绑定区域的野指针
}

结果:
在这里插入图片描述

总结

  • 指针数组 *p[n]:是数组,装着指针的数组
  • 数组指针 (*P)[n]:是指针,这个指针可以指向数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值