|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 风过无痕1989 于 2020-9-7 13:16 编辑
看走眼了,第8行是抄错了,运行后,答案B是正确的
- #include<stdio.h>
- #include<string.h>
- void f(char *s,char *t) // 定义 f 函数,形参是两个指针变量
- {
- char k; // 定义一个临时变量 k
- k = *s; // 将接收的第一个实参赋给临时变量 k [color=Red](原程序下面几行写在一行,为了解释方便,分开成几行了)[/color]
- *s = *t; // 将接收的第二个实参赋给第一个实参指向的地址
- *t = k; // 将临时变量保存的原第一个实参的值赋给第一个实参指向的地址。至此,就完成了两个实参的互换
- s++; // 将第一个实参指向的地址加 1
- t--; // 将第二个实参指向的地址减法 1
- if(*s)f(s,t); // 递归调用 f 函数
- }
- void main()
- {
- char str[10] ="abcdefg",*p; // 定义一个字符数组并赋值,定义一个字符型指针变量p
- p = str + strlen(str)/2 + 1; // 用 strlen 计算字符数组的长度,字符的长度是 1,7个字符长度就是7,除 2 就是3.5,自动取整就是 3,于是字符型指针 p 就指向了数组首地址 + 3 + 1,即字符 e
- f(p,p - 2); // 将字符型指针指向的地址,及该地址减2,作为函数 f 的两个实参,调用 f 函数
- printf("%s\n",str); // 输出字符串,即函数返回的数组各元素的值
- }
复制代码
既然楼主至今没有选出最佳答案,想必是没有得到他想要的结果,而我又将抄错了的程序,纠正后重新出来了。现补充程序每一步实现的功能,帮助楼主理解,希望是楼主想的结果了。
|
|