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); 我是初学者,最好能讲出详细的原因啊
说实话,上面四种写法都不正确,相对来说A是比较正确的 首先*p=&a,就是将a的地址值赋给p,也就是p==&a 其次,s[]="abc"是在内存区域里面开设4个字节的字符型数组,保存'a','b','c','\0'四个字符,并将数组的第一个字节的地址值赋给s,即s[0]='a',也就是说,s是一个指针,保存有字符串的第一个地址值 这样一来,由于scanf要求用地址作为参数,A选项里面的就满足要求,不过,在输入字符串的时候,如果字符串的长度大于3,则可能会覆盖掉其他变量的值,以至于程序错误
出题的人肯定不是程序员! 这个题明显有BUG,输入字符串超过3个字符就越界了,系统不挂才怪! 拿错误题考人有什么用?纯粹误导人。 从语法上讲,C语言能对变量进行改动的只有指针。 scanf是输入函数,肯定是要改变变量的。因此输入的参数必须是指针。 只有A是符合语法要求的,p是int型指针,s是char数组指针。 只有A能编译通过。 千万别按这个书上的例子学!还是找本国外比较经典的C语言教材学习好。 不要被误导。
答案是A
我觉得是A! B和C先排除掉,因为B中,P是指针,没有&p这种写法,C中应该是&a! D中,s其实也是一个指针,也不能&s。 所以只有A是对的!
答:从大的硬币开始分.程序在附件里,算法很简单,自已看吧!详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>