指针和数组问题
以下正确的程序段是_____Achar str;
scanf("%s",&str);
B char *p;
scanf("%s",p);
Cchar str;
scanf("%s",&str);
D char str,*p=str;
scanf("%s",p);
书上的一道题,答案给的是C,想问下&str不是代表数组第三个元素的地址吗,
为什么可以使用%s输入,不应该%c才可以吗 是啊,但你为什么那么确定输入的一定是字符呢? 本帖最后由 墨羽岚 于 2020-3-16 17:36 编辑
元素又不一定是字符啊,也有可能是字符串(依照我做的100多套试卷来看大多都是字符串)
比如这道#include <stdio.h>
#include <string.h>
main()
{ chars={"red","yellow","green","blue","white"};
int i,j;char t;
for(i=0; i<4; i++)
for(j=i+1;j<5; j++)
if(strlen(s)<strlen(s))
{strcpy(t,s); strcpy(s,s); strcpy(s,t); }
printf("%s\n",s);
}
我觉得是这样
scanf("%s",str);
比如这样,他是从首地址开始读取
%s 字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。
而
scanf("%s",&str);从第三个地址开始向后读取 A选项错的的原因是用的是&str,然而,&str的类型是char (*)。但是scanf中需要的char *。因此出错了。若是写成scanf("%s",str);就对了。
C选项就是这样的,&str的类型就是char*,只是没从str开始而已。但是语法上是没问题的。
最后的魁拔 发表于 2020-3-16 17:37
我觉得是这样
scanf("%s",str);
比如这样,他是从首地址开始读取
我也是和你一样理解的,但又不敢说对不对 str+2是第三个元素地址*(str+2) 或 str代表第3个元素 所以元素取地址 第一个问题:
&str是代表数组第三个元素的地址,那也可以理解为指针,而你要求输出的是%s,这是什么?这是传进去一个指针,返回一串字符串,有什么特征,遇到'\0'截止。
那么假设:str它就应该是{'a','b','c','d','\0'}的样子,然后我&str,在打印%s的效果,不就是{'c','d','\0'}?哪个不符合打印的要求?
为什么可以使用%s输入,不应该%c才可以吗?
第二个问题:
%s是string的意思,打印字符串
而%c是char的意思,打印一个字符 书上答案不一定对,敲下代码验证下就明白了
A是没有问题的,str和&str都是字符串的首地址,A能够正确给str赋值。
C是可以运行,但是输出会出现问题,由于获取的字符是从str开始存放的,str与str 没东西,输出str字符串是空的。
要输出刚刚输入的内容只能用printf("%s",&str);
两个选项从实践角度,个人觉得A比较正确。
小笨笨难得糊涂 发表于 2020-3-17 01:24
书上答案不一定对,敲下代码验证下就明白了
A是没有问题的,str和&str都是字符串的首地址,A能够正确给str ...
C正确,其他全错
认真看题,题目可没有提到输出
就只是问 哪一个程序段正确,没有说输出
题目没有提到printf函数
A哪错了?
页:
[1]