将字符串s1中任何与字符串s2匹配的字符都删掉

     源自《The C Programming Language》P38 pr2-4:

 

     编写函数squeeze(s1, s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。

 

     代码:

    

     分析:

 

     1,  关于函数返回值,如果本例中将字符串s定义在函数squeeze中,当执行完return s;后,将会给主函数返回一个char*

          指针,但因为s是squeeze的局部变量,当调用完squeeze后会释放字符串s所占有的空间,故在主函数中打印字符串

          printf("%s/n", squeeze(str, charset));时,只是打印了存放在主函数临时变量中的从squeeze中返回的指针所指向

          的字符串,而这个字符串是个未知字符串,所有会在终端打印出莫名其妙的字符串。

 

     2,  关于函数返回值的解析:例如函数fun1调用了函数fun2,当fun2返回时,会将返回值暂存在寄存器中(一般是eax),

          当程序返回到fun1中执行时,fun1会将返回值从eax中拷贝到自己的栈空间中(一般以临时变量的形式),故而在fun1

          中可以使用fun2的返回值。

          Q: 返回值是怎么会被保存到寄存器里呢?

          A:你用return x语句,编译器会给你自动插入
               mov eax, x
               ret
               的代码,汇编指令ret在这里只有返回调用地址的作用,返回值x存储在eax中。

 

     3,  如果将s定义在main函数中,则在squeeze函数中使用s是非法的,未定义的,使用本例中将s定义为全局变量,这样

          不管是对main还是squeeze函数都是可见,已定义的。

 

 

 

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值