4. 若有声明:

int  a[15], ∗p, ∗q;

则执行下面语句后,q − p的值是多少?

p = a;
q = &a[6];

[解析]

下面声明:

int  a[15], ∗p, ∗q;

定义整型数组a,下标从0至14;定义整型指针p和q,效果如下图所示:

fq-001-01

执行下面语句后

p = a;
q = &a[6];

语句p = a;等价于p = &a[0];,令指针p指向数组a的首元素a[0],&a[0]是第0元素a[0]的地址,&叫做取地址运算符,C语言把数组名a定义为&a[0]。语句q = &a[6];,令指针q指向数组a的第6元素a[6],效果如下图所示:

fq-001-02

q − p的值是两指针间隔元素的个数,即6−0 = 6,而q − p + 1的值是两指针之间元素的个数,即6−0+1 = 7,包括p和q所指的两个端点元素在内。这些论断与数组a的元素类型无关。

[练习题] 

试用下面程序验证上述结论:

fq-001-03

fq-001-04

返回