C语言经典试题--指针

分享一道C语言的经典的题目.题目要求如下:

  利用字符指针实现字符串1“I Love China”与字符串2“So do I”的输出。然后利用字符指针将字符串2的内容复制到字符串1中,然后输出字符串1.

乍一看,没什么大的问题,用一个strcpy()函数直接就可以解决掉,但是仔细读题,指针!当时就没怎么学懂,所以在这,记录一下血与泪的辛酸史.

 

一、问题思路与代码

  先看下面一段代码:

1 char string1[50]="I Love China.";
2     char string2[50]="So do I.";
3     char * p1,* p2;
4     p1=string1;
5     p2=string2;

很简单的两句话,初始化指针为两个字符串的首地址.

  接着,尝试把字符串输出.

1 for(p1;*p1!=0;p1++)
2     {
3         printf("%c",*p1);    
4     }

  string2原理相同,到这的话还是很简单的嘛.

  接下来,我们需要将字符串2的内容复制到字符串1中,啊哈,这才是重头戏.

  首先,我们一定要初始化指针,否则就是在原先的指针之后进行操作,然后进行如下操作:

1 for(;*p2!='\0';p2++,p1++)
2     {//将string2赋值到string1并将其覆盖 
3         *p1=*p2;
4     }
5     *p1='\0';

  通过判断是p2的地址否到达字符串的最后,来将他们的指针的值进行交换,输出string1.好,问题解决.

 

二、思考

  解决上一个问题之后,我们可以在这个问题上升升级,问题如果变成这样呢?

    利用字符指针实现字符串1“I Love China”与字符串2“So do I”的输出。然后利用字符指针将字符串2的内容连接到字符串1中,然后输出字符串1.

  同样,在使用过指正之后应该将指针初始化,这是一个良好的习惯.

  然后,定义一个空指针p,使他初始化为string1(因为在开始初始化的时候,我们使用*p1来储存string1中的值,所以这时候 1 for(p=p1;*p!='\0';p++); 就在通过指针间的作用将p进行初始化,这里我是为了使p指针移动到p1后的位置).

1 char *p;
2     int i;
3     for(p=p1;*p!='\0';p++);
4     for(i=0;*(p2+i)!='\0';i++,p++)
5     {
6         *p=*(p2+i);
7     } 
8     *p='\0';    

  随后,将p2的指针值添加到p后,这样就完成了.  

posted @ 2019-06-18 17:13  啾啾丶丶  阅读(3105)  评论(0编辑  收藏  举报