我主要根据一本书编写了几行代码,让您声明一个 integer
数组,然后减去数组中的两个 address
并将其传递给另一个数组integer
,以便传递到 printf
语句中。我不确定为什么,但我的实际指针:aPointer
和 bPointer
似乎是 8 字节
,这在我尝试时会出现问题将减去的 addresses
传递给 integer
。
然后我将后者更改为 long
。现在 Xcode 中不存在错误,但我无法使用确实需要 int
的 %p
说明符正确打印 pointerSubtraction
的地址而不是 long
。
int arrayOfInts[10];
for (int i = 0; i < 10; i++) {
arrayOfInts[i] = i;
printf("%d", arrayOfInts[i]);
// prints out 0123456789
}
printf("\n");
int *aPointer = &arrayOfInts[1]; // get address of index 1
int *bPointer = &arrayOfInts[7]; // get address of index 7
long pointerSubtraction = bPointer - aPointer; // subtract index 7 with 1
printf("The size of aPointer is %zu bytes \n", sizeof(aPointer));
printf("The size of aPointer is %zu bytes \n", sizeof(bPointer));
printf("The address of aPointer is %p \n", aPointer);
printf("The address of bPointer is %p \n", bPointer);
printf("The address of final is %p \n", pointerSubtraction);
printf("The value of pointerSubtraction is %ld \n \n", pointerSubtraction);
最佳答案
您可能喜欢使用类型为 ptrdiff_t
的变量来存储两个指针值、两个地址的差异。
要printf()
输出ptrdiff_t
,请使用长度修饰符“t”
。由于 ptrdiff_t
是有符号整数,因此使用转换说明符 "d"
。
#include <stddef.h>
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0, * pa = &a;
ptrdiff_t ptr_diff = pa - &b;
printf("pd = %td\n", ptr_diff);
return 0;
}
此外,转换说明符 "p"
是仅为指向 void
的指针定义的。所以 printf()
调用应如下所示:
printf("The address of aPointer is %p \n", (void *) aPointer);
printf("The address of bPointer is %p \n", (void *) bPointer);
Also^2 :从指针 p
添加或减去值 v
的结果只有当结果 pv
时才是有效地址该操作仍然引用原始指针 p
指向的对象(的元素/成员)。
关于c - 整数指针减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924972/