北京双圆监理公司招聘:一个指真数组的问题(help)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/09 04:44:29
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是
A) for(i=0;i<6;i++) printf("%2d",*(p++));
B) for(i=0;i<6;i++) printf("%2d",*(p+i));
C) for(i=0;i<6;i++) printf("%2d",*p++);
D) for(i=0;i<6;i++) printf("%2d",(*p)++);
/*为什么要%2d,而不是%d,还有为什么选D能解释下吗?*/

%2d只是改变了数的输出格式,比如原来是%d输出的8,在%2d就会是_8,_表示一个空格;
指针是指向内存的,声明后p指向数组中第一个数的地址,比如:
x[6]={2,4,6}在内存中地址分别是Add_A,Add_B,Add_C,那么p=Add_A,而*p表示这个地址上存的数,所以开始时*p=x[0]=2。当p增加时,由于数组中地址是连续的,p往前走,如p+1,p就变成Add_B了,此时*p=4。所以A、B两个都可以正常的输出;另外,在C中*p++默认为*(p++),只有如果在*p加了括号才不是,就像D选项那样。D选项根本没有对指针进行操作,所以*p永远都是=Add_A也就是说,指针不往前走。*p=2,最终输出
2,3,4,5,6,7

%2d 意思是显示整型数,当数据小于2位数(小于10)时在前面插入一个空格,大于等于2位数时按实际位数显示。

D不能完成此操作的原因是:(*p)++ 意思是给p所指向的单元里的数加一,也就是给x[0]++,所以它是不能完成此操作的。

%2d是为了控制输出位数为2,其实%d也是可以的.
我觉的该选B呀!