C++总结笔记(十)——堆区内存开辟数组和二级指针
生活随笔
收集整理的這篇文章主要介紹了
C++总结笔记(十)——堆区内存开辟数组和二级指针
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、堆區(qū)開辟數(shù)組
- 1. 數(shù)組指針與指針數(shù)組的區(qū)別
- 2. 1維數(shù)組
- 3. 2維數(shù)組
- 二、二級指針
一、堆區(qū)開辟數(shù)組
1. 數(shù)組指針與指針數(shù)組的區(qū)別
數(shù)組指針是指指向數(shù)組的指針,它的本體是一個指針, 聲明指針變量的時候一般用括號,因為括號的優(yōu)先級高于[],這樣在編譯的時候就知道這是聲明一個數(shù)組的指針。
int (*p)[5];指針數(shù)組是指數(shù)組由指針組成的數(shù)組,下面表示由5個指針變量組成了一個名為p的一維數(shù)組。
int *p[5];2. 1維數(shù)組
1維數(shù)組的聲明方式很多,可以概括為4種方式
1:類名* 指針 = new 類名[Size];
2:類名* 指針 = new 類名[Size] ();
3:類名* 指針 = new 類名[2]{ N1,N2};
4:類名* 指針 = new 類名[2]{ N };
3. 2維數(shù)組
方法一:
#include<iostream> using namespace std;int main() {//二維數(shù)組的格式為類名+(指針變量)[列數(shù)]。 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行數(shù)組指針的地址for (int i = 0; i < row; ++i){arr[i] = new int[col]();//為每一行分配地址,內(nèi)存空間的長度為col*4}for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j)//為數(shù)組填充元素{arr[i][j]++;cout << arr[i][j]<<endl;}}//釋放空間for (int i = 0; i < row; ++i){delete[col]arr[i];//先釋放二維數(shù)組中每個元素指向的數(shù)組arr[i] = NULL;}delete[row]arr;//在釋放該指針數(shù)組} 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++总结笔记(十)——堆区内存开辟数组和二级指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNN(卷积神经网络)、RNN(循环神经
- 下一篇: C++总结笔记(十一)—— Lambda