一步一步写算法(自己实现strcpy函数)

v 自己编写一个函数,实现strcopy库函数的功能。

   #include <stdio.h>

void my_copy(char *i,char *j)
{
	while(*j != '\0')  //遍历字符数组b 
	{
		*i = *j;      //取出数组B中的元素赋值给a 
		i++;          //指针指向数组a的下一个地址 
		j++;          //指针指向数组b的下一个地址 
	}
}


int main()
{
	char a[10] = {0};
	char b[10] = {0};

	printf("Please input the the string of b:\n");
	scanf("%s",b);

	my_copy(a,b);
	printf("a : %s\n",a);

}

运行结果:

Please input the string of b:

hello

a : hello


程序二:

#include <stdio.h>

void my_copy(char *i,char *j)
{
	while(*i++ = *j++);     //简练:同时实现取值,赋值,地址加一,三个功能 
}


int main()
{
	char a[10] = {0};
	char b[10] = {0};

	printf("Please input the string of b:\n");
	scanf("%s",b);

	my_copy(a,b);
	printf("a : %s\n",a);

	return 0;
}


运行结果:

Please input the string of b:

hello

a : hello

 

 

分析:从以上两个函数可以看出在my_copy函数中,语句while(*i++ = *j++); 就相当于*i = *j; i++;j++;这三句话。语句所实现的功能就是将数组b中的,每一个元素都赋值给b

那么为什么上面的一个语句就能实现这三个语句的功能呢?

 

我们首先的先了解这么一个知识点:

*p++(*p)++的区别

 

下面举个例子来说明:

Int *p,a;

P = &a;

*p = 3;

 

那么

Y = *p++即先将P地址里面保存的数据取出来,再赋值给y,最后将P的地址加一,指向下一个元素

Y = (*p)++:即先将P地址里面保存的值取出来,再赋值给Y,最后将P地址里面保存的内容加一

总结下来,区别也就是一个是地址加一,一个是地址里面保存的内容加一。并且两个语句其实都实现了三个功能。

所以,学会巧妙的使用*p++(*p)++有利于我们进一步学好算法和指针。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值