我的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). ( a + 2 ) - a (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |