#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;
}
Run Code Online (Sandbox Code Playgroud)
我明白
ptr2 - ptr1
Run Code Online (Sandbox Code Playgroud)
给出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
Run Code Online (Sandbox Code Playgroud)
编辑:我错误地说,演员强制指针对齐