例谈字符串与指针

在学习C语言的过程中,最重要的是多练,但在多练的过程中,我们是有必要去弄懂别人程序的思想,理清思路,如果我们每天只是盲目的敲代码,去拼代码量,那么到最后会发现自己除了键盘敲击速度提高了,对于C语言的认知却没有任何加深。古人有云:熟读唐诗三百首,不会作来也会吟,对于语言的学习我们要多读多练多想,只有量的积累才会达到质的改变。

#include <stdio.h>
#include <stdlib.h>


char
*mystrcpy(char *dest,char *src)
{
char *p = dest;

while (*src != '\0')
{
*dest++ = *src++;
printf("%s\n",p); //我自己添加的
printf("%s\n",src); //我自己添加的
}

return p;
}


int 
main(void)
{
char *dest,*src;
src = "Hello world!";

dest = mystrcpy(dest,src);

printf("%s\n",dest);

return 0;
}

这段程序是我从李亚锋先生的《C面试真题精讲》上摘录下来的,这段程序是相当于库函数extern char *strcpy(char* dest, const char *src)的简单实现,主要考察了指针和字符串之间的用法。对于这段程序我是苦读了很多遍,一直未能理解,我想他在mystrcpy函数中为什么还要定义*p这个指针?,*dest++ = *src++这句话又是什么意思呢?这些问题都深深困扰着我,让我百思不得其解,后来让我顿悟的原因是我理解了函数参数的传递,我们知道参数的传递方式有两种,一种是值传递,另一种是地址传递,不同的传递方式,在内存空间的分配和对参数改变是不同的,我们常见的数组和指针都属于后者是地址传递,数组和字符串指针传递的都是首地址,如果你明白这一点的话,这个程序就更容易理解了,这个程序有图解的话会更好。*src++可以理解为*(src++),对于这个函数比较难以理解的地方在于为什么有*p,为什么还要返回一个指针类型值呢,对于这个问题的理解我认为可取的是可以实现链式操作。另外上面程序还有不完善的地方,没有考虑到输入参数的合法性和内存区域重叠问题,你有什么好的见解呢,可以 自己试一下,网上关于这方面的讲解挺多的,我就不多讲了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值