永发信息网

求高手解释以下程序。为何输出是AGAAGAG?????

答案:2  悬赏:20  手机版
解决时间 2021-11-12 03:05
  • 提问者网友:临风不自傲
  • 2021-11-11 21:55
求高手解释以下程序。为何输出是AGAAGAG?????
最佳答案
  • 五星知识达人网友:山河有幸埋战骨
  • 2021-11-11 22:09


#include
#include
void fun(char *w,int m)
{  
char s,*p1,*p2;
p1=w;
p2=w+m-1;
int i=1;
while(p1
printf("%d. p1:%d,p2:%d
",i,p1,p2);
printf("   *p1:%c,*p2:%c
",*p1,*p2);
s=*p1++;
*p1=*p2--; 
*p2=s;
printf("   p1:%d,p2:%d
",p1,p2);
printf("   *p1:%c,*p2:%c
",*p1,*p2);
printf("   s:%c
",s);
printf("   a:%s
",w);
printf("
");
i++;
}
}
void main()

char a[]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}


请采纳
追问p1=w;是不是表示p1指向了字符串w的首地址,即A的地址????

s=*p1++;是不是等于s=*p;p++;???追答对,是这样的
w在这里就是字符串a的首地址
s=*p1++; 就是先将*p1赋给s,然后执行p1++
全部回答
  • 1楼网友:妄饮晩冬酒
  • 2021-11-11 23:34
上述代码等同于下面代码:

#include
#include
void fun(char *w, int m);//函数原型
int main()
{
char a[]="ABCDEFG";
fun(a,strlen(a));
puts(a);
return 0;
}
void fun(char *w,int m)//函数定义
{
char s,*p1,*p2;//定义char型变量s,char型指针p1,p2
p1=w;//将w赋值给p1,使得p1指向数组头
p2=w+m-1;//p2指向数组尾
while(p1{
//使得p1指向下一个位置,再获得它的值。
//即最后将第二个值赋值给s
s=*(p1++);
//*p1为数值,右边的表达式先使p2指向前一位,即倒数第二位
//再得到倒数第二位的值赋值给*p1
*p1=*(p2--);
//将s赋值给*p2
*p2=s;
//交换第二位和倒数第二位的值
}
}
真是万恶的国人啊,别的不搞,天天纠结于一些++,--的问题。这段代码的风格特别不好,希望以后写代码不要跟这道题似的。多看看国外的教材,老谭的书还是有些微坑啊。这段代码要注意的地方有:
1,前缀表达式(++,--)和后缀表达式的区别。前缀表达式是将其值加一后直接使用,后缀表达式先使用原来的值,复制一个副本,将其加一然后返回。这意味这前缀版本比后缀版本的运行效率高。
2,运算符的级别。前缀运算符和解除引用运算符(*)级别相同。以从右向左的方式结合。后缀元素符的优先级高于前两个运算符。*++pt:先将pt运用++,然后再解除引用。++*pt则意味着先取得pt指向的值(解除引用),在使用++。而*pt++由于后缀运算符级别更高,这表示先使用pt++,即先使得指针指向下一个位置,在得到它指向的值。
3,指针问题。指针比较容易混淆的就是如:int *pt, pt是指针,是地址。而*pt则是指针所指向的数值。而char s, *p1, *p2;的意思就是创建char型变量s,和char型指针p1,p2。
4,函数问题。这不得不再次吐槽一下这段代码的风格,函数是先申明,再调用。这段代码就。。fun()函数接受两个参数,一个是char *, 一个是int。而strlen()函数返回数组的长度。
具体分析:字符串为ANCDEFG,分析函数fun,代码中给的注释是第一次循环时,指针已经指向了第二位和倒数第二位,但由于用的是后缀表达式,不会立即更新p1和p2。依次类推可得结果为
AGAAGAG。由此我们可以知道,当表达式改为前缀版本,结果将是:AFEDCBG
总结:1注意一下编程风格,这一看就是国内教材,整天搞什么++,--的,本质的东西到没有学到,推荐你看一下国外教材,老谭的书可以歇歇了。其他的就更不能看了.
2c98后main函数都是默认int型,嫌麻烦可以不加最后的返回语句return 0;编译器会自动通过
3我这么辛苦,财富值应该给我吧?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯