c语言 不能给数组a输入字符串的语句是

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:01:52
以下定义
??#include
??char a[10],*b=a;
??不能给数组a输入字符串的语句是
??A) gets(A) B) gets(a[0]) C) gets(&a[0]); D) gets(B) ;
答案是B,谁能给我解释下啊~~~仔细点的~~~

函数gets( &addr);带的参数&addr必须是地址变量。 换句话说,不带地址变量就是不安全的,或者说是不正确的,故答案是B。详细分析如下:

A) gets(a) //a即为a[0]的地址,为数组变量的首地址。
B) gets(a[0]) //a[0]为数组的首个元素,不是地址,所以不正确。
C) gets(&a[0]);//答案跟A相同,都是取数组的首地址。
D) gets(b) ; //*b为指针变量,b即为该指针的地址。

因为答案B

gets()方法里要一个数组做参数,放指针也行,所以写a[0]是错的,只面只放了数组中的一个元素,改为&a[0]把数组的首地址给他和指针是一样的

貌似没啥可解释的啊...
看看gets函数原形就明白了.

函数名称: gets
函数原型: char *gets( char *buffer );
函数功能: 从标准输入设备上读取一行字符

要求参数类型char*型.
明显只有B项不能匹配.
a[0],俗称下标变量,不是一个指针.

答案是B

答案A应该是:A) gets(a)
答案D应该是:D) gets(b)
b=a=&a[0],所以A,C和D等价的

看参数类型就可以了
弄清 指针,地址和内容,就会理解了