zoukankan      html  css  js  c++  java
  • C语言复杂声明,指针的复杂用法

    有一个声明如下: char *(* (*a[n] ) () )( );

    如何理解?

    优先级是要记住的 [] ,() 优先级比*高。再有 (*p)() 这是一个整体,代表函数指针 ,(*p[n])() 代表一个函数指针数组,该数组里面全是指向函数的指针(address);

    *(*p[n])() ;该数组里面全是指向函数的指针返回一个地址。

    (*(*p[n])())() ,也是一个函数指针, ,*(* (*a[n] ) () )( ),指向该地址的指针的指针函数返回一个地址

    总体就是:这是一个包含N个指向返回指向字符的指针的函数的指针的数组。

    其实可以简单些: char *(* (*p ) () )( );把数组去掉好理解些。就是函数指针的嵌套。

    还有一种逆向思维 :char *(*p)()

    1:*(*p)()是一个char;

    2:(*p)()是函数调用候返回的char的地址;

    3:(*P)是返回该函数;

    4:p 是该函数的地址。

    其实这个声明比较简单:一个函数指针P调用后返回一个地址,该地址指向一个char行变量。

    再来一个:

    char * const *(*next)()

    这个比较好理解,next为一个函数指针,指向的函数被调用后返回一个(指向char的常量型的指针---这个指针不可被修改);

     再来一个

    p=(char(*)[20])malloc(20) 

    这个也比较简单,我向内存申请了20字节的空间,然后把它每个空间都强转为char型空间

    最后建议一下:最好不要做如此复杂的声明!难以理解,小心被人打

  • 相关阅读:
    重回大一
    20071027我以为我很大度
    凌晨三点
    山洞爱情
    JQuery上传插件Uploadify使用详解
    jquery ui layout
    win2003下direct的问题
    Aptana一些快键用法
    IE、Firefox、Chrome 的JS代码兼容注意事项
    2011学习计划
  • 原文地址:https://www.cnblogs.com/coversky/p/6845080.html
Copyright © 2011-2022 走看看