zoukankan      html  css  js  c++  java
  • C中关于指针数组的用法

     1 typedef char(*AP)[5];
     2 
     3 AP foo(char *p)
     4 {
     5     for(int i = 0; i < 3; i++)
     6       p[strlen(p)] = 'A';
     7     return (AP)p + 1;
     8 }
     9 
    10 int main(void)
    11 {
    12     char s[] = "FROGSEALLIONLAMB";
    13     puts(foo(s)[1] + 2);
    14 }

    结果是:"ONALAMB"

    分析过程:typedef char (*AP)[5]; 声明了一个指向类型为char元素个数为5的一维数组。

    return (AP)p + 1; 其中(AP)p为强制类型转换,使p转换为指向一维数组的指针,其中的元素个数为5。foo函数返回的地址为:p指向 'S'

    foo(s)[1]: 由于返回的类型是AP,相当于强制转换,类似于 (AP)p 将p强制转换为指向一维数组的指针,同样的元素个数为5。p[1] 现在指向了 'L'

    最后,由于foo(s)[1] + 2, 再向后移动两个元素,使得p指向了 'O'。

    补充:foo函数的作用就是将 s[] 数组中的 '' 变成: 'A'.

    因此,得到了最后的结果: "ONALAMB"。

    以上内容仅代表个人理解,如有不适之处,还望不吝赐教!
  • 相关阅读:
    golang语法要点笔记
    环境配置
    实现chrome多用户独立cookie
    Golang遇到的问题记录
    php preg_replace去除html xml 注释
    C 基础
    多种写法
    mysql 查看当前数据库
    sql group by
    sql CONCAT()
  • 原文地址:https://www.cnblogs.com/wojiaowoen/p/6806882.html
Copyright © 2011-2022 走看看