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代码中有一个奇怪的结果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)