我的C代码中有一个奇怪的结果

我的C代码中有一个奇怪的结果,第1张

概述我在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. 我在C中有以下代码:

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

当我运行此代码时,则x = 2.

但如果我运行这个:

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

他们x = 8.

为什么我会得到不同的价值观?

解决方法 在你的情况下,8等于2 * sizeof(int)

在第一个代码片段中,使用了指针算术,而在第二个代码snipeet中,使用了具有整数的普通算术.

在这个表达中

&(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代码中有一个奇怪的结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1216083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存