【发布时间】:2015-04-08 16:53:02
【问题描述】:
指针的差异给出 1 作为输出..
#include<string.h>
#include<stdio.h>
int main()
{
int a=5,b=10;
int *p=&a,*q=&b;
int c=p-q;
printf("%d",c);
return 0;
}
【问题讨论】:
-
因为它们碰巧在内存中相隔一个
int,并且指针算术根据底层类型而不是字节来计算。 -
但是指针在内存中是否总是相隔一个整数..?
-
不,这是未指定的,你不能相信这个事实,但通常你会发现它是正确的,因为编译器按照他在代码中找到局部变量的顺序在堆栈上分配局部变量。但是,如果您有 int 和 float 变量,情况就大不相同了。
-
@RajeshSethi:请注意,
a和b在内存中恰好隔开一个int(这不能保证——请参阅 DrKoch 的评论),而不是p和 @ 987654327@。p-q只是减去恰好存储在p和q中的两个指针(地址)。在机器代码级别,减去两个指针会产生字节差异(可能在实际机器上),但 C 的语义将其转换为ints 的计数(或任何指向的类型),通过如果愿意,可以隐式除以sizeof(int)。