gpt4 book ai didi

c - 整数指针减法

转载 作者:行者123 更新时间:2023-12-04 11:03:24 25 4
gpt4 key购买 nike

我主要根据一本书编写了几行代码,让您声明一个 integer 数组,然后减去数组中的两个 address 并将其传递给另一个数组integer,以便传递到 printf 语句中。我不确定为什么,但我的实际指针:aPointerbPointer 似乎是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com