zoukankan      html  css  js  c++  java
  • 浅谈特殊的指针。

    今天我们来聊一聊,那一些特殊的指针。

    1.指针数组和数组指针。

    我们先来看下面两个语句:

    int *p[10];    (1)
    
    int (*p)[10];  (2)

    这个时候我们需要引入一个很重要的东西——运算符优先级表。

    不难看出,“ [] ”优先级高于“ * ”,不难得出结论语句(1)中p先和“ [] ”结合,语句(2)中p因为()的存在,先和" * "结合,所以可以得出,语句(1)指的是指针数组,顾名思义,即存放指针的数组,而语句(2)是数组指针,即一个有能力指向一个数组的指针。

    2.函数指针。

    接下来我们来看下面两个语句:

    void (*pfun1)();      (1)
    
    void *pfun2();        (2)

    我们对于语句(2)应该很熟悉,这就是一个返回值为void*类型的函数,而对于语句(1),就又要用到我们的运算符优先级表了,语句(1)中p先与“ * ”结合,所以语句(1)是一个指针,而且他指向一个没有参数的函数,返回值类型为void。

    3.函数指针数组

    最后我们要讲一下函数指针数组,看下面代码:

    int (*parr[10])();

    根据优先级,parr先和" [] "结合,所以该语句是一个数组,然后parr[]与“ * ”结合,所以数组里的内容是指针,而且是函数指针。

    函数指针数组用途有:计算器。具体在这里也不举例了。

    4.总结

    讲了这些,我们就需要提一下,我们在区分一个变量是函数还是指针还是数组的时候,最需要用到的一个工具——运算符优先级表。有了这东西,我们将来遇到数组指针,指针数组,函数指针,函数指针数组,甚至指向函数指针数组的指针的时候,也可以很好的看出其类型。

    感谢审阅。

  • 相关阅读:
    ls: cannot open directory .: Permission denied
    postman报错:Could not get any response
    IO流的继承关系
    吸顶效果
    linux报错:ls command not found
    内存寻址能力与CPU的位宽有关系吗?
    CPU与内存
    SQL语言的分类
    32位CPU和64位CPU 区别
    linux添加环境变量
  • 原文地址:https://www.cnblogs.com/shy0322/p/7856443.html
Copyright © 2011-2022 走看看