与while( *s++ = *t++ );等价的程序段是?
与while( *s++ = *t++ );等价的程序段是?A.
while ( *t )
*s++ = *t++;
B.
do {
*s = *t++;
} while ( *s++ );
C.while ( *s )
*s++ = *t++;
D.
do {
*s++ = *t++;
} while ( *t); 答案是 a。
选项 a 和选项 c 基本相同,但语句的作用略有不同。选项 a:指针 t 与指针 s 同时自增,即先自增再取值;而选项 c:指针 s 先自增再赋值。
选项 b 和选项 d 将在 *s 赋值后再将指针 s 和 t 同时自增,这样会使得 *t 多一个值的判断处理,因此 b 和 d 不等价于 while( *s++ = *t++ )。 sfqxx 发表于 2023-4-26 21:41
答案是 a。
选项 a 和选项 c 基本相同,但语句的作用略有不同。选项 a:指针 t 与指针 s 同时自增,即先 ...
我问过GPT 但是这题正确答案是B... 与 `while( *s++ = *t++ );` 等价的程序段是:
B.
do {
*s = *t++;
} while ( *s++ );
这两段代码都实现了将字符串 `t` 复制到字符串 `s` 的功能,包括终止的空字符。当 `*t` 为零(即空字符)时,循环将停止。在这两段代码中,首先将 `t` 中的字符复制到 `s`,然后递增 `s` 和 `t` 的指针。 isdkz 发表于 2023-4-26 22:13
与 `while( *s++ = *t++ );` 等价的程序段是:
B.
能详细讲一下4段代码吗?感觉实现功能都一样,为什么会有一个正确答案。 a905448839 发表于 2023-4-26 22:16
能详细讲一下4段代码吗?感觉实现功能都一样,为什么会有一个正确答案。
6 sfqxx 发表于 2023-4-26 22:17
6
{:5_107:} a905448839 发表于 2023-4-26 22:16
能详细讲一下4段代码吗?感觉实现功能都一样,为什么会有一个正确答案。
当然可以。让我们逐个分析这4段代码:
A.
while ( *t )
*s++ = *t++;
这段代码在 `*t`(源字符串的当前字符)不为零(即非空字符)时继续循环。循环体将 `*t` 复制到 `*s`,并将 `s` 和 `t` 的指针递增。但是,这段代码不会处理终止的空字符,因此它并不等价于 `while( *s++ = *t++ );`。
B.
do {
*s = *t++;
} while ( *s++ );
这段代码首先将 `*t` 复制到 `*s`,然后将 `t` 的指针递增。接下来,如果 `*s` 不为零,循环会继续,并将 `s` 的指针递增。这段代码确实处理了终止的空字符,与 `while( *s++ = *t++ );` 等价。
C.
while ( *s )
*s++ = *t++;
这段代码在 `*s`(目标字符串的当前字符)不为零时继续循环。这会导致问题,因为我们不能保证目标字符串初始时就有一个空字符。因此,这段代码不等价于 `while( *s++ = *t++ );`。
D.
do {
*s++ = *t++;
} while ( *t);
这段代码首先将 `*t` 复制到 `*s`,然后将 `s` 和 `t` 的指针递增。接下来,如果 `*t` 不为零,循环会继续。这段代码没有处理终止的空字符,因此它也不等价于 `while( *s++ = *t++ );`。
虽然这些代码段看起来很相似,但只有选项B正确处理了字符串的结束,并确保了源字符串(包括空字符)被完全复制到目标字符串。因此,选项B与 `while( *s++ = *t++ );` 等价。
页:
[1]