这个程序的输出是如何产生的?

Ami*_*mar 6 c

我有一段用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)

Jon*_*ler 6

严格来说,您正在调用未定义的行为,并且根据C标准,程序生成的任何结果都是正常的.

但是,你可能在一台机器上sizeof(int) == 4(而不是说2).由于整数有4个字节,因此相隔3个字节的两个地址是同一整数的一部分,因此地址之间的差异是0 * sizeof(int).如果您选择ptr1 = arr + 1;,或者您可能没有,您可能会找到不同的答案.但这就是未定义行为的美妙之处 - 无论哪种方式都是'正确的'.