C++总结笔记(十)——堆区内存开辟数组和二级指针
生活随笔
收集整理的这篇文章主要介绍了
C++总结笔记(十)——堆区内存开辟数组和二级指针
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 一、堆区开辟数组
- 1. 数组指针与指针数组的区别
- 2. 1维数组
- 3. 2维数组
- 二、二级指针
一、堆区开辟数组
1. 数组指针与指针数组的区别
数组指针是指指向数组的指针,它的本体是一个指针, 声明指针变量的时候一般用括号,因为括号的优先级高于[],这样在编译的时候就知道这是声明一个数组的指针。
int (*p)[5];指针数组是指数组由指针组成的数组,下面表示由5个指针变量组成了一个名为p的一维数组。
int *p[5];2. 1维数组
1维数组的声明方式很多,可以概括为4种方式
1:类名* 指针 = new 类名[Size];
2:类名* 指针 = new 类名[Size] ();
3:类名* 指针 = new 类名[2]{ N1,N2};
4:类名* 指针 = new 类名[2]{ N };
3. 2维数组
方法一:
#include<iostream> using namespace std;int main() {//二维数组的格式为类名+(指针变量)[列数]。 int(*p)[3] = new int[3][3]{ {1,2,3},{4,5,6},{7,8,9} };int i, j;//输入行列值cout << "输入行号:"; cin >> i;cout << "输入列号:";cin >> j;//p表示指针首元素的地址,所以*(p+i-1)表示指针地址加了4*(i-1)*3,(*p+j-1)表示指针地址加了4*(j-1)cout << p << endl;cout << p[0] << endl;//1行1列元素的地址cout << (*(p + 1 - 1)) << endl;//1行1列元素的地址cout << (*(p + 1 - 1)+1) << endl;//1行2列元素的地址cout << (*(p + 2 - 1)) << endl;//二行一列元素的地址cout << *(*(p + i - 1) +j- 1) << endl;cout << p[i-1][j-1] << endl;//直接访问 } 输入行号:1 输入列号:1 0109E048 0109E048 0109E048 0109E04C 0109E054 1 1方法二:
#include<iostream> using namespace std;int main() {int row;cin >> row;int col;cin >> col;int** arr = new int* [row];//二级指针指向row行数组指针的地址for (int i = 0; i < row; ++i){arr[i] = new int[col]();//为每一行分配地址,内存空间的长度为col*4}for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j)//为数组填充元素{arr[i][j]++;cout << arr[i][j]<<endl;}}//释放空间for (int i = 0; i < row; ++i){delete[col]arr[i];//先释放二维数组中每个元素指向的数组arr[i] = NULL;}delete[row]arr;//在释放该指针数组} 3 3 1 1 1 1 1 1 1 1 1二、二级指针
int a = 10; int* p = &a;int** p1 = &p;//a的指针的指针cout << p << endl;cout << *p1 << endl;cout << p1 << endl;cout << **p1 << endl; 0097FB0C 0097FB0C 0097FB00 10总结
以上是生活随笔为你收集整理的C++总结笔记(十)——堆区内存开辟数组和二级指针的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CNN(卷积神经网络)、RNN(循环神经
- 下一篇: C++总结笔记(十一)—— Lambda