2022/11/24 [指针] 用函数调用实现字符串的复制(字符型指针)
admin
2024-02-13 10:38:01
0

解题思路:定义一个函数copy_string 用来实现字符串复制的功能,在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针变量

(1)用字符数组名作为函数参数

#include 
int main()
{
void copy_string(char from[],char to[]);
char a[] = "I am a teacher.";
char b[] = "You are a student.";
printf("string a=%s\nstring b=%s\n", a, b); 
printf("copy string a to string b:\n");
copy_string(a, b);
printf("\nstring a= %s\nstring b=%s\n", a, b);
return 0;
}
void copy_string(char from[], char to[])
{int i = 0;while (from[i] != '\0'){to[i] = from[i];i++;}to[i] = '\0';
}

(2)用字符型指针变量作实参
 

#include
int main()
{void copy_string(char from[], char to[]);char a[] = "I am a teacher.";char b[] = "You are a student."; char* from = a, * to = b;printf("string a= %s\nstring b=%s\n",a, b); printf("\ncopy string a to string b: \n");copy_string(from, to);//字符型指针变量作品作实参printf("string a=%s\nstring b=%s\n", a, b);return 0;
}
void copy_string(char from[], char to[])
{int i = 0;while (from[i] != '\0'){to[i] = from[i];i++;}to[i] = '\0';
}

程序分析:指针变量from的值是a数组首元素的地址,指针变量to的值是b数组首元素的地址。它们作为实参,把a数组首元素的地址和b数组首元素的地址传递给形参数组名from和 to(它们实质上也是指针变量),其他与程序(1)相同。
 

 

(3)用字符指针变量作形参和实参

#include
int main()
{void copy_string(char* from, char* to);char* a = "I am a teacher.";char b[] = "You are a student.";//定义b为字符数组char* p = b;printf("string a=%s\nstring b=%s\n", a, b);printf("\ncopy string a to string b: \n");copy_string(a, p);//通过p改变bprintf("string a=%s\nstring b=%s\n", a, b);return 0;
}
void copy_string(char* from, char* to)
{for (; *from != '\0'; from++, to++){*to = *from;}*to = '\0';
}

程序改进:

(1)将copy_string函数改写为

void copy_string(char * from,char * to)

{while (( * to= * from)!='\0')

{to++;from++;}

这是先赋值后判断,免去了最后还要给*to赋空字符额外的一步。

 

(2) copy_string函数的函数体还可改为

{ while (( * to++= * from++)!='\0') ;}
将++放在了一起,即赋值判断后再各自++

或者写成:{while ( * from!='\0')
*to++=* from++;

* to='\0'; }

 

(3)由于字符可以用其ASCII 码来代替(例如,“ch='a'”可用“ch= 97”代替,“while(ch!='a')”可以用“while(ch!=97)因此,“while( * from!='\0')”可以用‘while( * from! =0)”代替('\0'的ASCII代码
而关系表达式“*from!=0”又可简化为*from”,这是因为* from的值不等于0,则表达式“* from”为真,同时“ * from!=0”也为真。因此“while( * from!=0)”和“while(* from)”是等价的。所以函数体可简化为

{ while ( * from)
* to++= * from++;

*to='\0’;
}
以上的while语句还等价于:while(*to++=*from++)

等价于:while((*to++=*from++)!='\0')

 

(4)也可以用字符数组名作函数形参,在函数中另定义两个指针变量pl,p2。函数copy_string可写为:

void copy_string(char from[],char to[])

{

char * p1,* p2;
pl=from; p2=to;
while(( * p2++=* p1++)!='\0');

}
 

相关内容

热门资讯

白银期货暴涨9%,白银基金暂停... 来源:21世纪经济报道 国投白银LOF最新公告,将于1月28日起暂停申购(含定期定额投资)业务。 ...
投机永不眠!加密货币失宠 币圈... 来源:智通财经网 加密货币市场的参与者如今正在大举转向预测市场。这种转向反映了机遇与倦怠并存。比特币...
专业分阶分龄内容的母婴平台和侧... 概述 在母婴垂直领域,不同平台基于自身定位,在功能侧重、用户群体和运营模式上存在差异。以下以妈妈网、...
一年“生活消费”2.9万亿元 ... 中新网郑州1月26日电 (阚力 王佳宁)2025年,河南省社会消费品零售总额2.9万亿元(人民币,下...
家居旧改市场潜力大 政策需求共... 当下存量房市场主导行业发展,国家“以旧换新”“好房子”政策持续加码,叠加居民居住品质升级需求,旧改市...
美国稀土上市公司披露获特朗普政... 财联社1月26日讯(编辑 史正丞)北京时间周一晚间,上周末引发市场关注的“美国政府入股美国稀土公司(...
光电股份:预计2025年度净利... 每经AI快讯,光电股份1月26日晚间发布业绩预告,公司预计2025年度实现归属于母公司所有者的净利润...
稀土价格持续上涨,行业龙头扭亏... 【大河财立方消息】1月26日,中国稀土集团资源科技股份有限公司(证券简称:中国稀土)发布2025年年...
掘金K12教育融资赛道:哪家服... 一、引言:政策与市场双轮驱动,K12教育融资需求迫切 1.1 K12教育行业融资现状与痛点 当前K...
美股金矿股,全线上涨 新闻荐读 1月26日,美股三大指数开盘涨跌不一,道琼斯指数涨0.38%,标普500指数涨0.24%,...
银行积存金业务紧急调整!工行、... 新京报贝壳财经讯(记者姜樊)1月26日,国际黄金价格再创历史新高。纽约商品交易所黄金期货价格和伦敦现...
国际金价突破每盎司5100美元 当地时间1月26日,国际黄金价格再创历史新高,纽约商品交易所黄金期货价格和伦敦现货黄金价格盘中双双突...
广东预期2026年地区生产总值... 每经记者|孔泽思 每经编辑|袁东 |2026年1月27日 星期二| NO.1广东经济总量连续37年...
原创 特... 全球金融格局风云变幻,一场悄无声息的“去美元化”浪潮正席卷而来。各国央行与大型养老基金的举动,如同秋...
原创 今... 2026年01月26日,国内黄金市场呈现高位震荡态势,国际现货黄金每盎司价格达到4986.53美元,...
消费首破50万亿元背后   数据显示,2025年我国社会消费品零售总额达到50.1万亿元,增长3.7%,消费对经济增长的贡献...
莲华资产洪灏:黄金成为全球资产... 近期黄金价格大幅走强,并带动有色金属板块稳健上行。2026年A股金属板块走势将如何演绎?投资者又应如...
飞阅楼市第210期丨本土“三驾... 文/青岛日报李鹏飞 2021-2025年,中国房地产行业迎来深度调整的“阵痛期”,青岛楼市在这一轮周...
突发!妙可蓝多创始人被免职并被... 【导读】妙可蓝多公告,柴琇被免去副董事长、总经理及法定代表人职务 中国基金报记者 郑俊婷 虽然妙可...
穿越周期的力量:2025中国企... 责编 | 贾宁排版| 沐言 第 9411 篇深度好文:20094字 |25分钟阅读 商业人物 笔记君...