zoukankan      html  css  js  c++  java
  • 二级指针偏移

    #include <stdio.h>
    void test_fuc(int b[][3])
    {
        ++b;
        b[1][1]=820;
    }
    int main(void)
    {
        int a[][3]={
            {1,2,3},
            {4,5,6},
            {7,8,9}
        };
       test_fuc(a);
       printf("a[2][1]=%d
    ",a[2][1]);
        return 0;
    }

    输出:

    数组当做函数参数的时候,会退化成指针,但是只退化一次,int b[][3]作为参数会变成(*b)[3];b是一个指针,指向一个数组,数组含有3个int类型的元素。++b之后,注意我们b的类型,一旦移动一个步长,相当于移动3个int位置,所以++b之后,b指向的是a[1][0];然后b[1][1];相当于b又移动了1个步长,即移动3个int位相当于对应a[2]了,在b[1]的基础上,再使用[1],相当于对应a[2][1];所以最后打印a[2][1]等价于b[1][1].

    平时我们习惯使用[]这样的下标运算代替指针运算,但是我们要清楚一个道理,b[1][1]等价于*(*(b+1)+1).

  • 相关阅读:
    Node 基本配置
    python GIL锁
    大数据 Zookeeper 集群
    大数据 Hadoop HA
    python 内置方法使用
    Linux Curl使用
    Linux 文件解压缩
    大数据 Hadoop 常见端口
    大数据 Hadoop 集群安装
    css结构设计思想
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7401314.html
Copyright © 2011-2022 走看看