已知int a, *p=&a; 则下列函数调用中错误的是 (A) scanf(“%d”, &a); (B) scanf(“%d”, p); (C) printf(

详解
(C) printf(“%d”, a);
(D) printf(“%d”, p);

做题的话选 D。
先说AC. scanf("%d", &a); printf("%d", a) 这两个不用怀疑,只要上过机就知道。
B,没有问题。因为p=&a即p已经接收了a的地址,所以scanf("%d", p)就做到了把a的地址传递给scanf函数,运行时输入的数值会正确存到a那里,没有问题。
D,在语义上就有问题,显示a可用printf("%d",*p),而显示p本身可用printf("%p", p)但几乎没实际意义。更深入的讨论不展开了。
不得不提scanf调用的较奇怪地方,要用取址运算符('&'),而printf不用。如果哪天用scanf忘了用'&',就会发现结果出问题了。初学只需记得scanf调用几乎一定要用'&',只有字符串不用就够了。 至于其原因,详细解释的话涉及到C函数的本质,等到学完函数和指针就明白了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-31
答案:D
分析:p是指针变量,输出用格式字符%d,两者相冲突!
第2个回答  2011-12-31
已知int a, *p=&a; 则下列函数调用中错误的是
(A) scanf(“%d”, &a);
(B) scanf(“%d”, p);
(C) printf(“%d”, a);
(D) printf(“%d”, p);

D是错的,改为printf(“%d”, *p);
指针名p没有意义
第3个回答  2011-12-31
第二个错了,不能直接输入并且改变指针p的地址
第4个回答  2011-12-31
A 10 B 20 C 不确定值 D 程序有错误 完整程序的话,D 因为A是未定义的符号
相似回答