【发布时间】:2014-08-11 06:04:25
【问题描述】:
基于C中的以下sn-p
int c1,c2;
printf("%d ",&c1-&c2);
Output : -1
- 为什么这段代码没有返回警告,指出格式 %d 期望的类型为 int,但它却得到了 (void *)。
- 为什么它返回 -1 作为答案(而不是 1)?即使它减去地址也应该是-4而不是-1。当我将 printf 语句更改为
printf("%d ",&c2 - &c1)时,我得到 1 而不是任何随机值!为什么? - 如果我将 printf 语句更改为
printf("%d ",(int)&c1 - (int)&c2)我是否将地址类型转换为整数值?这是否意味着存储为十六进制的地址的值现在转换为 int 然后减去?
【问题讨论】:
-
1)指针类型的区别是有符号整数。
-
2) 指针2 = 指针1 + 1:指针1 - 指针2 == -1,指针2 - 指针1 == 1
-
@ShafikYaghmour:我的错,已删除。
标签: c casting memory-address pointer-arithmetic