New、delete、指针及引用

在C++中,使用new 和 delete 进行动态控件申请时,代码如下:

1
2
int* p = new int;
Delete p ;

使用一维数组时,代码如下;

1
int* p = new int[9];

使用部分定长二维数组时,代码如下:

1
2
3
4
5
6
7
8
int n = 10;
int(* p)[20] = new int[n][20];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 20; j++) {
p[i][j] = 0;
}
}
delete[] p;

使用二维全不定长数组,其实就是利用for和一维数组来实现,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int n = 10;
int m = 10;
int** p = new int*[n];
for (int i = 0; i < n; i++) {
p[i] = new int[m];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
p[i][j] = 0;
}
}
for (int i = 0; i < n; i++) {
delete[] p[i];
}
delete[] p;

使用此方法创建二维数组的时候,若还需要动态改变数组大小,可以用vector实现,即将二维数组的第二维数据使用 vector 来代替即可,若需要二个维度都可以随时改变,即将第一维度要改成第二维度的指针类型。

注:delete只能删除new 所申请的地址!

//———————————————————————下面是指针内容—————————————————————

1、禁止改写指针,即常指针。

1
2
Int x = 0;
Int * const pInt = &x;

使用以上方法申请的指针,无法再修改指针地址,只能修改指针指向的内容。

2,、禁止改写间接引用,即指针只能读取数据,无法修改数据。

1
2
Int x = 5
Const int * pInt = &x;

另一种写法是:

1
Int const * int = &x;

3、数组即指针。

4、指向函数的指针、

1
Int (* compare)(const char*,const char*) = strcmp;

————————————————-下面是引用的内容———————————————————

1、 C++不允许修改引用变量的引用来源,可以修改引用变量指向目标的值。

2、不可以对数组添加引用,因为其本身是个指针。

3、可以声明指针的引用 代码如下:

1
2
3
4
5
6
Int * & pInt = x;
``
4、C++允许对new 申请的动态无名内存建立一个引用,代码如下:
```C
Int & refInt = * new int
Delete & refInf;

注:引用对象与被引用对象最好类型一致,否则需要const来帮助声明(极不推荐),若被引用对象为常数,则同样需要在左边加上const,具体例子如下:
```C
Const int & refInt = 9;
Int x;
Const double & x refDouble = x ;
111