谢谢!C语言1 把运行过程说详细点!

来源:百度知道 编辑:UC知道 时间:2024/05/19 01:02:14
# include <stdio.h>
main()
{ char *strc(char *str1,char *str2);
char s1[]="1234567",s2[]="98",*pt;
pt=strc(s1,s2);
printf("%s\n",pt);
}
char *strc(char *str1,char *str2)
{
char *p=str1;
do
{ *p++=*str2++;
}while(*str2!='\0');
*p='\0';
return(str1);
}
1) 该程序的输出结果为( )。
(A) 98 (B) 89 (C) 123456789 (D) 1234567
(2) 若去掉strc函数中的“*p='\0'; ”语句,输出为( )。
(A) 98 (B) 89 (C) 9834567 (D) 1234567

1)结果为98
解:调用函数strc()时将s1和和s2两个字符串传过去,函数strc()用两个指针str1和str2分别来接受s1和s2这两个字符串,在strc()函数中又定义了一个P指针将str1的值赋给p,其实这时p和str1都同时指向了s1这个字符串。接下来的循环完成的就是将str2指向的字符串s2中内容赋给p和str1同时指向的字符数组s1中。循环完成后这时的p的值为2即指向字符串s1的第三个元素,因为s2字符串中只有两个数,所以p现在指向s1的第三个元素(其实现在字符s1中的内容为“9834567”,第一个元素和第二个元素已被s2的覆盖了,此时*p指向3这个元素)。最后的*p=‘\0’即是加上结束,那字符串s1的内容就变成了“98\034567”。最后输出函数返回的是str1这个指针,由pt接受,其实此时的pt也指向了s1这个字符数组。输出的时候,因为字符串的输出遇到‘\0’就结束了。所以为98
2)结果为:9834567
原因在第一题中其实已经说明了,因为把*p='\0'去掉了之后,在字符串的输出中需要遇到\0才会结束,所以就只有输出到原s1字符串最后的那个\0时才会停止输出。

不知道我有没有给你讲清楚