我有一段用C编写的代码,其中执行了一些指针算法.我想知道输出是怎么来的?
#include <stdio.h>
int main()
{
char arr[] = "gookmforgookm";
char *ptr1 = arr;
char *ptr2 = ptr1 + 3;
printf ("ptr2 - ptr1 = %d\n", ptr2 - ptr1);
printf ("(int*)ptr2 - (int*) ptr1 = %d", (int*)ptr2 - (int*)ptr1);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
ptr2 - ptr1 = 3
(int*)ptr2 - (int*) ptr1 = 0
Run Code Online (Sandbox Code Playgroud)
严格来说,您正在调用未定义的行为,并且根据C标准,程序生成的任何结果都是正常的.
但是,你可能在一台机器上sizeof(int) == 4(而不是说2).由于整数有4个字节,因此相隔3个字节的两个地址是同一整数的一部分,因此地址之间的差异是0 * sizeof(int).如果您选择ptr1 = arr + 1;,或者您可能没有,您可能会找到不同的答案.但这就是未定义行为的美妙之处 - 无论哪种方式都是'正确的'.