首页 > 试题广场 >

有以下程序段,若从键盘输入:abc def↙,则输出结果是?

[单选题]
有以下程序段:
char *p, *q;
p = (char *)malloc(sizeof(char) * 20);
q = p;
scanf("%s %s", p, q);
printf("%s %s\n", p, q);
若从键盘输入:abc def↙,则输出结果是( )
  • def def
  • abc def
  • abc d
  • d d
推荐
答案:A
解释:p q 指向同样的地址, 
scanf("%s %s", p, q);"abc"赋值给p,然后"def"赋值给q(即p),把之前的赋值覆盖了。 
编辑于 2015-01-07 14:42:49 回复(4)
q,p指向同一地址
发表于 2015-10-21 14:00:32 回复(0)
p和q是指向同一地址,故答案肯定是输出一样的字符串,输入字符串后,p q最开始指向abc ,当输入def后,开始的地址被覆盖,一起指向def
发表于 2016-12-31 22:21:45 回复(3)
奥,懂了,p=q的意思就是指向同一块地址,无论你p赋值多少,q赋值多少。只要看最后一次谁被赋值,该地址就被谁覆盖
发表于 2022-03-28 15:43:42 回复(0)

scanf("%s",string); /*遇到空格认为输入结束*/

所以在输入的字符串中包含空格时,应该使用gets输入。

发表于 2018-10-10 10:36:29 回复(0)
为什么我在scanf函数中间添加一个逗号即scanf(“%s,%s”,p,q);输入abc,def回车之后结果会是abc,def abc,def 不应该也是def覆盖掉abc从而输出def def 吗 求大神指导!!!思考很久都不知道为啥
发表于 2018-04-04 22:03:01 回复(2)
int main( )
{
char *p, *q;
p = (char *)malloc(sizeof(char) * 20);
printf("p :%p  q: %p\n",  p,q);
q = p;
printf("p :%p  q: %p\n",  p,q);
scanf("%s %s", p, q);
printf("%s %s\n", p, q);
}

运行结果:

指针指向地址相同了,所以值都是一样的,先输入abc的时候p是abc,再输入def
的时候,q变成def,由于pq指向地址相同,p也是def


发表于 2021-10-20 15:51:30 回复(0)
两个指针指向同样的地址,故值是一样的
发表于 2016-05-16 17:43:05 回复(4)

在C语言中,语句的执行方向是从左往右。这意味着表达式中的运算符将按照它们在表达式中出现的顺序进行求值。

例如,对于表达式 a + b * c,首先会执行乘法运算 b * c,然后再将其结果与 a 相加。这是因为乘法运算符 * 的优先级比加法运算符 + 高,所以会先执行乘法运算。

同样,对于函数调用 func(a, b, c),参数 abc 的求值顺序是从左往右的,然后再将它们作为参数传递给函数 func

然而,C语言中的一些运算符(例如赋值运算符 = 和函数调用运算符 ())的结合方向是从右往左的。这意味着在连续使用这些运算符时,它们将从右到左依次进行求值。

例如,对于赋值表达式 a = b = c = 10,首先会将 c 的值赋给 b,然后再将 b 的值赋给 a,最终三个变量的值都变为 10

总结起来,C语言中的语句执行方向是从左往右,但是某些运算符的结合方向是从右往左。这些细微的差异需要注意,以避免出现意外的结果。

发表于 2023-07-23 11:26:28 回复(0)
最开始p是abc,但q是def后,又覆盖了abc
发表于 2019-02-27 11:01:10 回复(0)
q没有空间怎么也会有值
发表于 2016-03-19 20:57:14 回复(1)
q=p  就是p和q指向同样的地址,之后先给p赋值,再给q赋值,则之前的赋值被新的赋值给覆盖掉了
发表于 2021-04-13 15:35:35 回复(0)
~~~
发表于 2019-11-16 12:56:54 回复(0)
scanf 不会改变p q的值,输入格式要与引号相同
发表于 2018-10-24 08:57:59 回复(0)

p = (char*)malloc(sizeof(char) *20);
q = p;
P,Q指向同一个空间,首先给P赋值为abc,现在空间中储存得就是abc,然后给q复制def,现在同一空间中储存得就是def了,所以最后就是def def

发表于 2018-08-08 19:30:13 回复(0)
那个箭头是啥意思?
发表于 2017-12-04 02:02:08 回复(1)
p和q是指向同一地址,对p赋值就等于对赋值,反过来也一样,题目中,最终赋值为def,所以结果为def
发表于 2017-08-21 10:32:53 回复(0)