m0_74624061 2024-12-23 01:41 采纳率: 50%
浏览 8
已结题

关于#c语言#的问题:}两个地址差了8个字节啊为什么打印出来是2呢

#include <stdio.h>
int main() {
    int a[3]= {0,2,3},*s,*p;
    s=a;
    p=&a[2];
    printf("%p\n%p\n",p,s);
    printf("%x",p-s);

    return 0;
}

两个地址差了8个字节啊为什么打印出来是2呢

  • 写回答

3条回答 默认 最新

  • 时光の尘 优质创作者: 嵌入式与硬件开发技术领域 2024-12-23 08:17
    关注

    在 C 语言中,当对指针进行减法运算时,结果并不是两个指针所指向的地址的字节差值,而是两个指针之间的元素个数差值。
    地址差值:p的地址减去s的地址,从字节角度看可能是 8 个字节(假设int为 4 字节,a[2]与a[0]相差 2 个int元素,即 8 字节)。
    但是当进行p - s运算时,C 语言按照元素个数来计算。p指向a[2],s指向a[0],它们之间相差 2 个int元素。
    所以p - s的结果是2,而不是字节差值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 12月23日