gpt4 book ai didi

c - 我的 C 代码中出现奇怪的结果

转载 作者:太空狗 更新时间:2023-10-29 16:01:41 24 4
gpt4 key购买 nike

我在 C 中有以下代码:

int arr[] = {1,7,4,2,5,8};
int x = (&(arr[arr[1] - arr[4]]) - arr);

当我运行这段代码时,x = 2。

但是如果我运行这个:

int arr[] = {1,7,4,2,5,8};
int a = &(arr[arr[1] - arr[4]]);
int b = arr;
int x = a-b;

他们 x = 8。

为什么我得到不同的值?

最佳答案

在你的情况下 8 等于 2 * sizeof( int )

在第一个代码片段中使用了指针运算,而在第二个代码片段中使用了带有整数的普通运算。

在这个表达式中

&(arr[arr[1] - arr[4]]) - arr

你处理指针。在这两个地址之间( &(arr[arr[1] - arr[4]])arr )有 两个 元素数组和第一个代码片段显示了这些地址之间有多少元素。然而,它们占用的内存大小等于 8,第二个代码片段显示了这一点。

考虑一个简单的例子会更清楚

int a[2];

sizeof( a ) 等于 8 即 2 * sizeof( int )。而 sizeof( a )/sizeof(int ) 等于 2。它与表达式的值相同

( a + 2 ) - a

关于c - 我的 C 代码中出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373167/

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