guh*_*fjn 3 c pointers subtraction
我期待下面的代码打印 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;
}
Run Code Online (Sandbox Code Playgroud)
首先,改变
printf("%d", &a[1]-&a[0]);
Run Code Online (Sandbox Code Playgroud)
到
printf("%td", &a[1]-&a[0]);
Run Code Online (Sandbox Code Playgroud)
因为两个减法的结果类型产生一个类型ptrdiff_t并且%td是该类型的转换说明符。
也就是说,引用C11第 6.5.6 章,减法运算符(强调我的)
两个指针相减时,都指向同一个数组对象的元素,或者指向数组对象最后一个元素后的一个;结果是两个数组元素的下标之差。[....] 换句话说,如果表达式
P和Q分别指向数组对象的i第 -th 和j-th 元素,则表达式(P)-(Q)具有值,i?j前提是该值适合类型为 的对象ptrdiff_t。[....]
在你的情况下,Pis&a[1]和Qis &a[0],所以iis1和jis 0。因此减法运算的结果是i-j,即1-0,1。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |