考虑下面的C程序。
null
# include int main( ) { static int a[] = {10, 20, 30, 40, 50}; static int *p[] = {a, a+3, a+4, a+1, a+2}; int **ptr = p; ptr++; printf ( "%d%d" , ptr - p, **ptr}; } |
程序的输出是_________ (A) 140 (B) 120 (C) 100 (D) 40 答复: (A) 说明:
为了简化涉及指针复杂操作的程序,我们建议您绘制适当的图表,以避免愚蠢的错误。假设整数是4字节,指针大小也是4字节。 假设一个数组的基址是1000。数组名实际上包含数组基址。
假设数组p的基址是2000。
双指针ptr基址为3000。
现在ptr实际上指向数组p的第一个元素。ptr++将使它指向数组p的下一个元素。它的值将更改为2004。 指针算法的规则之一是,当你减去两个指针时,只要它们指向同一个数组,结果就是分隔它们的元素数。 ptr指向第二个元素,p指向第一个元素,因此ptr-p将等于1(不包括ptr指向的元素)。 现在ptr=2004–>*(2004)=1012–>*(1012)–>40。
因此,最终的答案是 140 .
这个解决方案是由 Pranjul Ahuja .
.
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END