• C语言细节


    一些常见细节

    • int *p[] int (*p)[] 的区别
      int *p[4];   //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
      int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。
      
      // 区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
      int *p[n];   // 这里,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
      int (*p)[n]; // 这里,( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。
      
      总结下来就是,越是接近标识符就越说明标识符的性质,看标识符先和哪个结合
      • int *p[ ] 中 p最先和[]结合,所以p是一个数组,至于是什么数组,则要看其他修饰符。下一个和p结合的是指针,说明p数组里面存放的是指针,至于是什么指针,再看int,数组里面的指针指向的是int型的整数。
      • *(*p)[ ] 中, p 最先和*结合,已经奠定了p是一个指针的基础了,至于该指针指向的是什么东西,就要由外层修饰符来决定,外层中首先和p结合的是[ ],这说明了指针p指向的是一个数组,至于该数组存放的是什么样的值,还需要继续向外解析,解析出int才知道,该指针指向一个数组,该数组存放的是int型的整数。
      • int (*p)() 同理,p先和*结合奠定了p是一个指针的基础,往解析得到(),说明该指针指向的是一个函数,该函数参数为空返回值int
      • int (*p[])() p最先和[]结合,说明这是一个数组,然后和*说明数组存放的是指针,()说明该指针指向的是函数,该函数参数为空,返回值int
      • 另外 int (*p)[]() 本意是想p是一个指针,指向一个一个数组,数组存放函数指针。但是没编译器解析出来的是数组存放函数,数组不能存放函数,所以这是不对的,在结合()代表函数之前需要先指明数组存放的是指针,所以应该写成如下:
      • int (*(*p)[])() p是一个指针,指向一个数组,该数组存放的是函数指针,该函数参数为空,返回int。
  • 相关阅读:
    python3 crypto winrandom import error
    Flask-Babel 中文支持(zh-CN和zh-Hans-CN)
    pip 安装psycopg的错误
    Aapache status / apache2ctl status 总是403
    为什么你还在用嵌入式的方式来使用mod_wsgi?
    Git中当add错误的时候怎么办?
    Python 内置彩蛋
    本人AI知识体系导航
    本人SW知识体系导航
    SSH密钥对登录的原理和实践
  • 原文地址:https://www.cnblogs.com/wjundong/p/11833984.html
Copyright © 2020-2023  润新知