gpt4 book ai didi

c - 这个程序的输出是怎么出来的?

转载 作者:太空狗 更新时间:2023-10-29 17:19:22 26 4
gpt4 key购买 nike

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

输出如下:

ptr2 - ptr1 = 3  
(int*)ptr2 - (int*) ptr1 = 0

最佳答案

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

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

关于c - 这个程序的输出是怎么出来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8500881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com