zoukankan      html  css  js  c++  java
  • 指针数组、数组指针以及二维数组

    先看一道题:

    #include <iostream>
    
    void main()
    {
        int n[][3] = {10,20,30,40,50,60};
        int (*p)[3];
        p=n;
        cout << p[0][0] << "," << *(p[0]+1) << "," << (*p)[2] <<endl;
        return 0;     
    }

    输出结果为:10,20,30

    上题考察的数组指针和二维数组之间的关系,其中n是一个2*3的二维数组,p是一个数组指针,数组指针是一个指针,指向一个数组。这里的p在(*p)中,说明p是一个指针,指针的类型是int(*)[3],指针所指向的类型为int[3],所以指针p指向一个长度为3的数组。

    一开始p指向n的第0行,因为第0行就是一个长度为3的数组。p[0]表示第0行的首地址(即&n[0][0]),p[0]+1表示第0行首地址偏移一个地址,即n[0][1]的地址(&n[0][1])。所以*(p[0]+1) 为n[0][1],答案是20。

    p==&p[0],表示第0行(因为下标从0开始),所以*p == p[0],表示第0行的首地址,所以(*p)[2] 为p[0][2],即n[0][2],答案是30。

    总结:

    直接在p上移动就是移动行,在*p上移动就是移动列。比如:**(p+1)等于p[1][0],*(*p+1)等于p[0][1]。

    未完待续~

  • 相关阅读:
    java 测试 (junit+ junit 断言 + postman)
    junit 运行(eclipse + IDEA)
    junit 常用注解 + junit 断言详解
    工作周报模板
    spring boot tomcat 部署
    spring boot 集成JSP
    spring boot 集成 Mybatis,JPA
    JPA 常用注解
    员工年终绩效考核表模板
    2013 Noip提高组 Day1
  • 原文地址:https://www.cnblogs.com/DWVictor/p/10074982.html
Copyright © 2011-2022 走看看