加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:52:51 所属栏目:百科 来源:网络整理
导读:我在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. 为什么我会得到不同的价
我在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读