c - 从另一个双指针中减去一个双指针的值是什么意思?
问题描述
int i = 9;
int *j = &i;
int* l = j + 1;
int **a=&j;
int **b=&l;
printf("%u\n",a);
printf("%u\n",b);
printf("%d\n",a-b);
输出:6422208 6422204 1. 1 表示什么?
解决方案
a
包含变量的地址j
(它本身包含变量的地址i
)
b
是 的地址l
。
然后前两个printf
向您显示变量j
和l
已分配到的地址。
在您的示例中j
并且l
在内存中是连续的(我假设int
您的架构上是 32 位)。这只是运气,他们可能彼此相距很远。
最后,当您像最后一个那样减去 2 个指针时printf
,您就是在对指针进行算术运算。
增加一个指针会将指向的类型的长度添加到地址中。例如,如果您打印变量的值j
和l
(不是它们的地址),您会发现两个地址之间的差异为 4。
类似地,两个地址的减法等于4
表示1
在 32 位架构的指针运算方面的差异。这就是它打印 value 的原因1
。
但是请记住,指针运算可能很棘手。关于减法,C99 标准规定:
当两个指针相减时,都应指向同一个数组对象的元素,或者指向数组对象的最后一个元素
所以在这里我认为你可以做减法a
,b
但这不是你想要在真实代码中做的事情。
推荐阅读
- javascript - 警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键 React
- arrays - 并列字母表的整数 ASCII 码
- java - 为什么 Maven 将 RELEASE 版本解析为第一个版本
- php - 解析错误:语法错误,FUNCTIONS.PHP 中文件意外结束,第 62 行
- flutter - 颤振:重建应用程序后出现颤振错误
- c# - 如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?
- abp - 在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)
- c# - How to display PointGeometryModel3D in GroupModel3D via Binding
- sql - 案例(如果有的话)
- vue.js - 如何在 b-table 模板标签中显示来自道具的数据?