c - 在内存位置中使用双指针
问题描述
我试图了解目的以及它是如何在这段代码中工作的双指针。
为什么我们**p
在声明函数中使用但在我们使用的函数内部*p
?
void allocate(int** p)
{
*p = (int*)malloc(sizeof(int));
}
int main()
{
int *p = NULL;
allocate(&p);
*p = 42;
}
解决方案
该函数的参数p
类型为指向 的指针int
,即int **
。因此,引用p
指的是该类型的对象。
表达式*p
取消引用 p
为您提供类型的表达式(也是左值)int *
。这与函数中的类型相匹配p
,main
并且实际上是指该对象。这允许我们在函数内部allocate
修改 in 的值p
以main
包含动态分配的内存块的地址。
推荐阅读
- ant - 属性应用在 ANT Build.xml 中循环定义
- ios - 为什么 UITableViewCell 不可访问(对于 VoiceOver)
- android - 为什么 SELinux 拒绝我的 Android 应用程序对其自己文件的读取权限?
- npm - 最小的 package.json
- python - 如何使用 Pandas 复制与 List 中日期值匹配的 DateTime 行
- html - 在图像加载之前保持img元素的纵横比?
- flutter - 函数返回一个 Future 的实例
而不是字符串 - c++ - 我可以使模板参数像函数参数的 std::optional 一样可选吗?
- django - 如何使用 Apache2 和 Mod WSGI 服务 Django 应用程序
- asp.net - IIS ASP.NET 模拟:指定了特定用户,但 User.Identity 为空