首页 > 解决方案 > 从另一个双指针中减去一个双指针的值是什么意思?

问题描述

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 表示什么?

标签: c

解决方案


a包含变量的地址j(它本身包含变量的地址i

b是 的地址l

然后前两个printf向您显示变量jl已分配到的地址。

在您的示例中j并且l在内存中是连续的(我假设int您的架构上是 32 位)。这只是运气,他们可能彼此相距很远。

最后,当您像最后一个那样减去 2 个指针时printf,您就是在对指针进行算术运算。

增加一个指针会将指向的类型的长度添加到地址中。例如,如果您打印变量的值jl(不是它们的地址),您会发现两个地址之间的差异为 4。

类似地,两个地址的减法等于4表示1在 32 位架构的指针运算方面的差异。这就是它打印 value 的原因1

但是请记住,指针运算可能很棘手。关于减法,C99 标准规定:

当两个指针相减时,都应指向同一个数组对象的元素,或者指向数组对象的最后一个元素

所以在这里我认为你可以做减法ab但这不是你想要在真实代码中做的事情。


推荐阅读