【问题标题】:subtracting two pointers(arrays), (C language) [duplicate]减去两个指针(数组),(C语言)[重复]
【发布时间】:2019-02-17 13:41:16
【问题描述】:
int vector[] = { 28, 41, 7 };
int *p0 = vector;
int *p1 = vector + 1;
int *p2 = vector + 2;

我知道结果

printf("%p, %p, %p\n", p0, p1, p2);

是前)100, 104, 108

但是为什么是结果

printf("p2-p0: %d\n", p2 - p0);
printf("p2-p1: %d\n", p2 - p1);
printf("p0-p1: %d\n", p0 - p1);

2, 1, -1

不是8, 4, -4????????

【问题讨论】:

  • 你知道指针差分结果的数据类型是什么吗?如果你这样做了,你不应该在 printf 中使用 %d...

标签: c arrays pointers


【解决方案1】:

当你减去指针(相同类型的,否则没有意义)计算索引的差异,而不是地址的差异:

type * p1 = ...;
type * p2 = ...;
(p1 - p2) == (((char *) p1) - ((char *) p2)) / sizeof(type)

vector + n 也是一样,它给出了元素等级 n 的地址,而不是((char *) vector) + n。所以

type * p = ...;
int n = ...;

((char *) (p + n)) == (((char *) p) + n * sizeof(type))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多