1、以下代码输出的结果是什么?
答案:输出空字串。
分析: * p2 ++相当于 *( p2 ++),先取p2值再与*结合,语句执行完p2再加加, * p1 ++类似。所以第5行代码执行完后将字符串"name"复制到第3行中所分配的内存中。但是由于第5行在复制数据的同时p2所指向的地址在变化,所以 第5行代码执行完后p2所指的位置如下:
1. char
*
p1
=
"
name
"
;
2. char * p2;
3. p2 = ( char * )malloc( 20 );
4. memset (p2, 0 , 20 );
5. while ( * p2 ++ = * p1 ++ );
6. printf( " %s " ,p2);
2. char * p2;
3. p2 = ( char * )malloc( 20 );
4. memset (p2, 0 , 20 );
5. while ( * p2 ++ = * p1 ++ );
6. printf( " %s " ,p2);
分析: * p2 ++相当于 *( p2 ++),先取p2值再与*结合,语句执行完p2再加加, * p1 ++类似。所以第5行代码执行完后将字符串"name"复制到第3行中所分配的内存中。但是由于第5行在复制数据的同时p2所指向的地址在变化,所以 第5行代码执行完后p2所指的位置如下:
因此输出的结果为空。
2.输出的x,y分别是多少?
答案:56,36; 57,94
分析: x = y ++ + x ++等价于 x = (y ++) + (x ++),第2行代码等号的右边值为55,y++先取y值再加加,x++也相同,所以x=55,但是由于式子中有x++,所以第2行代码执行后x的值变成了56,y变成了36。 y = ++ y + ++ x相当于 y = ( ++ y) + ( ++ x),++y是先将y值加一再取y值,++x也如此,因此y=37+57,结果x=57,y=94。
3.下面输出的结果是多少?
答案:M
分析:字符串 "Monday!"返回的是一个字符串指针(char *),*(pch)就是字符串的第一个字符,所以为M。
2.输出的x,y分别是多少?
1. int
x
=
20
,y
=
35
;
2. x = y ++ + x ++ ;
3. printf( " %d,%d " ,x,y);
4. y = ++ y + ++ x;
5. printf( " %d,%d " ,x,y);
2. x = y ++ + x ++ ;
3. printf( " %d,%d " ,x,y);
4. y = ++ y + ++ x;
5. printf( " %d,%d " ,x,y);
分析: x = y ++ + x ++等价于 x = (y ++) + (x ++),第2行代码等号的右边值为55,y++先取y值再加加,x++也相同,所以x=55,但是由于式子中有x++,所以第2行代码执行后x的值变成了56,y变成了36。 y = ++ y + ++ x相当于 y = ( ++ y) + ( ++ x),++y是先将y值加一再取y值,++x也如此,因此y=37+57,结果x=57,y=94。
3.下面输出的结果是多少?
printf(
"
%c
"
,
*
(
"
Monday!
"
));
分析:字符串 "Monday!"返回的是一个字符串指针(char *),*(pch)就是字符串的第一个字符,所以为M。