C++中关于int *p和 int* p的区别?

根据C++Primer介绍:

对于int* p(这种写法合法,但是容易造成误导),其基本数据类型是int,后面的*其实是声明符。在一组公用的数据类型后面可以使用不同的声明符。例如: int i =1024, *p = &i, &r = i;    //i是一个int类型的数据,p是一个int型的指针,r是一个int型引用。

对于int *p,其和int* p 的含义一样,都表示int类型的指针变量p。

但是将声明符紧跟着变量名是一种更容易理解的做法。否则可能会出现误导现象:

例如 int* p1, p2;表示含义是p1是一个int型的指针,p2是一个int型变量。而不是p1,p2都是指针变量,它们共用的是基本数据类型部分。

如果写成int *p1,p2;则和上式表示的含义完全一样,但是更加清晰,不会造成误导。

不过对于以上两种写法的使用,主要看个人的习惯,但是最好不要混用。

### C++ 中三维指针 `int ***p` 的用法 在 C++ 中,三维指针可以理解为指向二维数组的指针。为了更好地理解使用三维指针,下面通过具体的例子来展示其定义、分配内存以及访问元素的方式。 #### 定义初始化 首先声明一个三维指针变量: ```cpp int*** p; ``` 接着需要动态分配内存给这个三维指针。假设要创建一个大小分别为 m×n×k 的整数立方体结构,则需分三步完成内存分配过程[^1]。 第一步是为最外层的一维指针分配空间: ```cpp p = new int**[m]; ``` 第二步针对每一行再开辟 n 个指向一维数组的空间: ```cpp for (size_t i = 0; i < m; ++i) { p[i] = new int*[n]; } ``` 最后一步则是逐一对每一个内部的一维数组进行 k 大小的分配操作: ```cpp for (size_t i = 0; i < m; ++i) { for (size_t j = 0; j < n; ++j) { p[i][j] = new int[k]{}; } } ``` 此时已经成功构建了一个完整的三维数据存储区域,并且可以通过索引来存取其中的数据项。例如设置某个位置上的数值如下所示: ```cpp p[x][y][z] = value; ``` 同样也可以读取指定坐标的值: ```cpp value = p[a][b][c]; ``` 需要注意的是,在程序结束前应当释放所申请的所有堆上资源以免造成泄漏问题。按照相反顺序依次删除各个维度即可实现这一点: ```cpp // 清理第三级指针 for (size_t i = 0; i < m; ++i) { for (size_t j = 0; j < n; ++j) { delete[] p[i][j]; } // 清理第二级指针 delete[] p[i]; } // 清理第一级指针 delete[] p; ``` 以上就是关于如何利用三层间接寻址机制管理多维数组的一些基础知识介绍。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值