有以下程序段:
char *p, *q; p = (char *)malloc(sizeof(char) * 20); q = p; scanf("%s %s", p, q); printf("%s %s\n", p, q);
若从键盘输入:abc def↙,则输出结果是( )
scanf("%s",string); /*遇到空格认为输入结束*/
所以在输入的字符串中包含空格时,应该使用gets输入。
在C语言中,语句的执行方向是从左往右。这意味着表达式中的运算符将按照它们在表达式中出现的顺序进行求值。
例如,对于表达式 a + b * c,首先会执行乘法运算 b * c,然后再将其结果与 a 相加。这是因为乘法运算符 * 的优先级比加法运算符 + 高,所以会先执行乘法运算。
同样,对于函数调用 func(a, b, c),参数 a、b、c 的求值顺序是从左往右的,然后再将它们作为参数传递给函数 func。
然而,C语言中的一些运算符(例如赋值运算符 = 和函数调用运算符 ())的结合方向是从右往左的。这意味着在连续使用这些运算符时,它们将从右到左依次进行求值。
例如,对于赋值表达式 a = b = c = 10,首先会将 c 的值赋给 b,然后再将 b 的值赋给 a,最终三个变量的值都变为 10。
总结起来,C语言中的语句执行方向是从左往右,但是某些运算符的结合方向是从右往左。这些细微的差异需要注意,以避免出现意外的结果。
p = (char*)malloc(sizeof(char) *20);
q = p;
P,Q指向同一个空间,首先给P赋值为abc,现在空间中储存得就是abc,然后给q复制def,现在同一空间中储存得就是def了,所以最后就是def def