#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/