gpt4 book ai didi

c - 减去两个指针给出意想不到的结果

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:03 24 4
gpt4 key购买 nike

#include <stdio.h>

int main() {
int *p = 100;
int *q = 92;
printf("%d\n", p - q); //prints 2
}

上面程序的输出不应该是8吗?

相反,我得到 2。

最佳答案

撇开未定义的行为不谈,这就是指针运算得到的行为:当减去指针合法时,它们的差表示指针之间的数据项数。如果 int 在您的系统上每个 int 使用四个字节,则相隔八个字节的指针之间的差异是 (8/4),计算结果为 2

这是一个没有未定义行为的版本:

int data[10];
int *p = &data[2];
int *q = &data[0];
// The difference between two pointers computed as pointer difference
ptrdiff_t pdiff = p - q;
intptr_t ip = (intptr_t)((void*)p);
intptr_t iq = (intptr_t)((void*)q);
// The difference between two pointers computed as integer difference
int idiff = ip - iq;
printf("%td %d\n", pdiff, idiff);

Demo.

关于c - 减去两个指针给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891748/

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