当前位置:编程学习 > VC++ >>

一道关于VC++的编程题

//设计一个程序,将输入的一个字符串按逆序输出
#include<iostream.h>

char *flip(char *ptr)
{
 char *p1,*p2,temp;
 p1=p2=ptr;
 while(*p2++);
 p2-=2;
 while(p1<p2){
  temp=*p2;*p2--=*p1;
  *p1++=temp;
 }
 return ptr;
}

void main()
{
 char str[200];
 cout<<"输入一个字符串:";
 cin.getline(str,200);
 cout<<str<<'\n';
 cout<<flip(str)<<'\n';
}

如果我输入ABCDEF,我不能理解:对于return  ptr,我想问,(1)ptr不是至始至终都没改变吗,为何会输出FEDCBA,这不是p2的结果吗?哪里可以看出ptr的结果就是p2呢(2)这道题运行完后,p1,p2,ptr都一样吗?为何呢?(3)请对照程序逐步讲解一下

追问:为何“ptr还是指向字符串的首地址,但是该字符串的值已改变”
答案:char *flip(char *ptr) //ptr指向字符串的首地址
{
 char *p1,*p2,temp;
 p1=p2=ptr;         //p1和p2也指向字符串的首地址
 while(*p2++);    //p2指向字符串的尾地址
 p2-=2;              //后退一个字符,指向 'F'
 while(p1<p2){   //当p1指向的地址小于p2指向的地址
  temp=*p2;*p2--=*p1;   
  *p1++=temp;   //交换p1和p2指向的地址上的字符,并且,p1向前移动一格,p2向后移动一格
 }
 return ptr;    //ptr还是指向字符串的首地址,但是该字符串的值已改变
}

p1,p2,ptr 指向的都是同一段空间里的元素。所以ptr的值确实没有改变,但是其值指向的空间中的值改变了。

所以输出达到了目的。

函数执行结束后,三个东西的值是不一样的。

 

 

有啥看不懂的,具体的提出来问吧。

上一个:VC++运行出错怎么会事!
下一个:VC++的一段小代码

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,