gpt4 book ai didi

c - 指针操作产生意外结果

转载 作者:行者123 更新时间:2023-12-01 08:21:23 26 4
gpt4 key购买 nike

我期待下面的代码打印 4(因为浮点数是 4 个字节),但它打印 1。有人会解释为什么会发生这种情况吗?

#include <stdio.h>
int main()
{
float a[4]={0.0,0.1,0.2,0.3};
printf("%d", &a[1]-&a[0]);
return 0;
}

最佳答案

首先,改变

  printf("%d", &a[1]-&a[0]);


 printf("%td", &a[1]-&a[0]);

由于两次减法的结果类型产生类型 ptrdiff_t%td是该类型的转换说明符。

也就是说,引用 C11 ,第 6.5.6 章,减法运算符(强调我的)

When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements. [....] In other words, if the expressions P and Q point to, respectively, the i-th and j-th elements of an array object, the expression (P)-(Q) has the value i−j provided the value fits in an object of type ptrdiff_t. [....]



在您的情况下, P&a[1]Q&a[0] , 所以 i1j0 .因此减法运算的结果是 i-j ,即 1-0 , 1 .

关于c - 指针操作产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59298552/

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