c - 为什么第二个printf打印0

标签 c pointers output

#include<stdio.h>
int main()
{
    char arr[] = "somestring";
    char *ptr1 = arr;
    char *ptr2 = ptr1 + 3;
    printf("ptr2 - ptr1 = %ld\n", ptr2 - ptr1);
    printf("(int*)ptr2 - (int*) ptr1 = %ld",  (int*)ptr2 - (int*)ptr1);
    return 0;
}

我明白了

 ptr2 - ptr1

给出 3 但无法弄清楚为什么第二个 printf 打印 0。

最佳答案

这是因为当你减去两个指针时,你得到的是指针之间的距离,以元素数为单位,而不是以字节为单位。

(char*)ptr2-(char*)ptr1  // distance is 3*sizeof(char), ie 3
(int*)ptr2-(int*)ptr1  // distance is 0.75*sizeof(int), rounded to 0 

编辑:我说转换强制指针对齐是错误的

关于c - 为什么第二个printf打印0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657510/

相关文章:

c++ - 如何计算字符串 vector ?

CLion IDE,输出不一致

c - 在C中使用信号量

c - 打印字符串指针导致 C 中的输出损坏

c++ 指向函数的指针没有改变

c - 打印结构体的值不显示正确的值

清除文件末尾的 2 个换行符

c++ - 大量警告会增加编译时间吗?

c - OpenCL - 将树复制到设备内存

c - 是否有与C相同的语言?