zoukankan      html  css  js  c++  java
  • [C/C++] C++中new的语法规则

    1 int *x = new int;       //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
    2 int *a = new int(100);  //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
    3 char *b = new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
    4 float *p=new float (3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p

    而二维数组的动态创建则较为复杂:

    ·动态申请列大小固定的二维数组

    1 //列值固定
    2 const int MAXCOL = 3;
    3 cin>>row;
    4 //申请一维数据并将其转成二维数组指针
    5 int *pp_arr = new int[nRow * MAXCOL];
    6 int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr;
    7 
    8 //此时p[i][j]就可正常使用

    ·动态申请大小不固定的二维数组

    方式1:

    1 cin>>row>>col;
    2 int **p = new int*[row];
    3 for (int i = 0; i < row; i ++)
    4 {
    5     p[i] = new int[col];
    6 }

    访问数据的方式:直接通过a[i][j]访问第i行第j列的数据。

    优缺点:通过a[i][j]访问数据容易,但是new的次数太多,释放空间不容易。

    方式2:

    1 cin>>row>>col;
    2 int *p = new int[row*col];//这种是当成一维数组连续开辟的

    访问数据的方式:通过a[i*(row+1)+j]来访问第i行第j列的数据。

    优缺点:访问数据很方便,且new的次数少,释放空间容易,但是不便于理解。

    测试代码:

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int row,col;
     6     cin>>row>>col;
     7     //方式1创建
     8     /*int **p = new int*[row];
     9     for(int i = 0; i < row; i ++)
    10     {
    11         p[i] = new int[col];
    12     }
    13     //赋值
    14     for(int i = 0; i < row; i ++)
    15     {
    16         for(int j = 0; j < col; j ++)
    17         {
    18             p[i][j] = i + j;
    19         }
    20     }
    21     //输出
    22     for(int i = 0; i < row; i ++)
    23     {
    24         for(int j = 0; j < col; j ++)
    25         {
    26             cout<<p[i][j]<<" ";
    27         }
    28         cout<<endl;
    29     }*/
    30     //方式2创建
    31     int *p = new int [row*col];
    32     //赋值
    33     for(int i = 0;i < row*col;i ++)
    34     {
    35         p[i] = i;
    36     }
    37     //输出
    38     for(int i = 0; i < row; i ++)
    39     {
    40         for(int j = 0; j < col; j ++)
    41         {
    42             cout<<p[i*(row+1) + j]<<" ";
    43         }
    44         cout<<endl;
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    各类运算符练习
    用if语句把24小时制转换成12小时制
    Android课程---优化ListView列表视图
    Android课程---关于ListView列表视图的学习
    Android课程---时间日期对话框
    Android课程---关于对话框的学习
    Android课程---用进度条改变图片透明度
    Android课程---进度条及菜单的学习
    Android课程---final关键字
    Android课程---日历选择器和时间选择器
  • 原文地址:https://www.cnblogs.com/lca1826/p/6506183.html
Copyright © 2011-2022 走看看