[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
原文地址:https://www.cnblogs.com/lca1826/p/6506183.html