欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++总结笔记(十)——堆区内存开辟数组和二级指针

发布时间:2023/12/10 c/c++ 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 };

#include<iostream> using namespace std;int main() {int* const p = new int[100];//在堆中开辟100个内存空间cout << p << endl;for (int i = 0; i < 100; i++){p[i] = i + 1;//每次循环数组的值加1,p[]表示值,不是指针}//调用一维数组for (int i = 0; i < 100; i++) {cout << p[i] << endl;}//用完记得删除delete[]p;return 0; }

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++总结笔记(十)——堆区内存开辟数组和二级指针的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。