爱问知识人 爱问教育 医院库

C语言程序题一道

首页

C语言程序题一道

若有下面说明语句:
int a,*p=&a;char s[]="abc";
则能正确从键盘上读入整数和字符串并分别赋值给变量a和s的语句是()
(A)scanf("%d%s",p,s);
(B)scanf("%d%s",&p,&s);
(C)scanf("%d%s",a,s);
(D)scanf("%d%s",&a,&s);

我是初学者,最好能讲出详细的原因啊

提交回答
好评回答
  • 2005-08-31 12:05:55
    说实话,上面四种写法都不正确,相对来说A是比较正确的
    首先*p=&a,就是将a的地址值赋给p,也就是p==&a
    其次,s[]="abc"是在内存区域里面开设4个字节的字符型数组,保存'a','b','c','\0'四个字符,并将数组的第一个字节的地址值赋给s,即s[0]='a',也就是说,s是一个指针,保存有字符串的第一个地址值
    这样一来,由于scanf要求用地址作为参数,A选项里面的就满足要求,不过,在输入字符串的时候,如果字符串的长度大于3,则可能会覆盖掉其他变量的值,以至于程序错误

    y***

    2005-08-31 12:05:55

其他答案

    2005-09-03 01:33:22
  • 出题的人肯定不是程序员!
    这个题明显有BUG,输入字符串超过3个字符就越界了,系统不挂才怪!
    拿错误题考人有什么用?纯粹误导人。
    从语法上讲,C语言能对变量进行改动的只有指针。
    scanf是输入函数,肯定是要改变变量的。因此输入的参数必须是指针。
    只有A是符合语法要求的,p是int型指针,s是char数组指针。
    只有A能编译通过。
    千万别按这个书上的例子学!还是找本国外比较经典的C语言教材学习好。
    不要被误导。

    y***

    2005-09-03 01:33:22

  • 2005-08-31 22:25:55
  • 答案是A

    x***

    2005-08-31 22:25:55

  • 2005-08-30 22:18:31
  • 我觉得是A!
    B和C先排除掉,因为B中,P是指针,没有&p这种写法,C中应该是&a!
    D中,s其实也是一个指针,也不能&s。
    所以只有A是对的!

    y***

    2005-08-30 22:18:31

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 174-193
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):