C中的数组地址减法[重复]
Posted
技术标签:
【中文标题】C中的数组地址减法[重复]【英文标题】:Array address subtraction in C [duplicate] 【发布时间】:2012-04-01 10:33:27 【问题描述】:可能重复:Pointer Arithmetic In C
代码:
int main()
int a[ ] =0,1,2,3,4;
char c[ ] = 's','a','n','j','u';
printf("%d\n",&a[3]-&a[0]);
printf("%d\n",&c[3]-&c[0]);
return 0;
为什么两者的输出都是 3 3,如果我们考虑到地址的差异,它们对于两者都会不同??
【问题讨论】:
还有……这有什么意义?你真的在问什么问题? 【参考方案1】:在指针算术中,减法返回的差异不是字节,而是两个指针之间的指针类型。
因此,由于 a[3]
和 a[0]
之间的 int
s 差异与 c[3]
和 c[0]
之间的 char
s 差异相同 - 两者的结果相同。
指针减法运算的算法类似于:
type* p1 = ...
type* p2 = ...
p1 - p2 == (((int)p1) - (int(p2))) / sizeof(type)
【讨论】:
以上是关于C中的数组地址减法[重复]的主要内容,如果未能解决你的问题,请参考以下文章