zoukankan      html  css  js  c++  java
  • 二维数组与双重指针

    一、二维数组

    #include <iostream>
    using namespace std;
    
    class RMB{
      public:
         RMB(unsigned d,unsigned c);
         RMB();
         virtual void display(ostream& out){}//虚函数的声明
       protected:
          unsigned yuan;
          unsigned jf;                  
    }
    class RMB_son:Public RMB{
      public:
         void display(ostream& out){//虚函数的实现
         out<<yuan<<','<<setfill('0')<<setw(2)<<jf<<setfill('');  
    }
    }
    
    ostream& operator<<(ostream&oo,RMB_son &d1){
      d1.display(oo);//插入运算调用虚函数
      return oo;
    }

    int array[10][10];
    函数声明: void fun(int a[][10])
    函数调用:fun(array);
    访问: 一般使用a[i][j]来访问数组中的元素

    二、指针数组

     int *array[10];
     函数声明:void fun(int *a[10]);
     函数调用:fun(array);
     访问:使用*(a[i]+j)访问数组中的元素

    三、指向指针的指针

    int **array;

    函数声明:void fun(int **a);

    函数调用:fun(array);

    访问:*(*(a+i) + j) 或者a[i][j]​访问元素(使用双重指针表示的二维数组的访问方法)

    注意:char **p和char p[2][3]之间不能互相传递参数,因为它们具体的内存分配不一样,这样在运行时就会出现端错误。

    还需要注意:

    二维数组中的a[i][j]和双重指针中的a[i][j]意思是不一样的。

    二维数组中的int a[10][10],a[i][j]指的是第i行第j列等元素。

    双重指针int **a中,a[i][j]指的是存放在int *指针所指向地址中的第j个元素。也就是*(*(a+i)+j)。

    简而言之char **和char *c[10]的内存分配是相同的,而char **和char [10][10]的内存分配是不同的。

    char[10][10]是

    一段连续的地址。

    而char **c的内存分配是:

  • 相关阅读:
    下载linux历史版本
    CentOS7 常用命令集合
    oracle初级系列教程
    redis内存数据的持久化方式
    使用Spring 或Spring Boot实现读写分离( MySQL实现主从复制)
    三个线程ABC,交替打印ABC
    wait,notify,notifyAll详细介绍
    索引优化分析
    Git常用命令使用大全
    长连接 、短连接、心跳机制与断线重连(转载)
  • 原文地址:https://www.cnblogs.com/Alei777/p/13903712.html
Copyright © 2011-2022 走看看