zoukankan      html  css  js  c++  java
  • C指针与数组之间的细节

    看以下代码:

    #include <stdio.h>
    void f(char**);
    int main()
    {
        char *argv[] = { "ab", "cd", "ef", "gh", "ij", "kl" };
        f(argv);
        return 0;
    }
    void f(char **p)
    {
        char *t;
        t = (p += sizeof(int))[-1];
        printf("%s
    ", t);
    }
    

     

    觉得执行后的值为多少呢?

    正确答案为: gh

    这里用到了double指针,也就是把指针的变量值传递给只接受指针参数的函数f(char**),函数里面的double 指针p最终结果是指向一个已经分配好值的数组单元。这个数组为["ab", "cd", "ef", "gh", "ij", "kl"]。

    定位到函数f(char **p),里面有一句话: t = (p += sizeof(int))[-1]。这里先将p指针移动一下位置,把p的地址递增了4个字节。由于最初的p指针指向了数组的第一个元素ab,这里移动了4个字节,那么就是从ab元素后面再数4个元素,也就定位到了ij元素。然后执行[-1]操作,这个操作等价于(p-1),意思是把指针往前面移动一个位置,也就是定位到了gh。注意了,一般看到p[-1]这种写法,其实把它看作(p-1)就好了。

    最后是输出结果,这里当然为gh。(前提是int类型等于4个字节)

  • 相关阅读:
    Filter and Listener
    Cookie Session
    怎样快速将一台电脑虚拟机导入另外一台电脑
    网页下载文件服务端代码
    图片验证码生成代码
    Request实战
    Response
    设置页眉页脚的距离
    页眉页脚的设置
    节的设置
  • 原文地址:https://www.cnblogs.com/ranwuer/p/8391973.html
Copyright © 2011-2022 走看看