[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] call是按址传递的

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd.>num.txt
  4. for /l %%n in (1001,1,1999) do (
  5.  call :num n %%n
  6.   echo !n!>>num.txt
  7. )
  8. start num.txt
  9. goto :eof
  10. :num
  11.  set %1=%2
  12.  echo %n:~-3%>>num.txt
复制代码

从这个例子中,我得出call是按址传递的,而非按值传递的。

请问楼主所描述的址是指什么?值又是指的什么?愿闻其详。。。
***共同提高***

TOP

批处理本来就没有函数的概念,又何来按址传递与按值传递?
不要以为有个call就是函数(过程)。

称有一定功能的代码块为“函数”,只是batcher爱好者的称呼。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

传值调用和引用调用(也叫做地址传递)的区别在这里有所讲解:Ritchie Lawrence 批处理函数库中英文版
http://bbs.bathome.net/thread-3056-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这个与按地址传递有何区别???若非按地址传递,代码块调用完之后n的值会沿用代码块里的值?

TOP

回复 5楼 的帖子

我认为并不是什么传址问题,而是bat中的变量默认都是全局变量,除非用setlocal进行局域化。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

call 所调用的命令,标签与其所在的cmd进程中的其它命令的关系是并列关系,它们共享属于当前cmd进程的变量空间,所以在直观上看起来call传递的参数像是按地址传递的,其实cmd中并不存在地址引用或数值引用的概念
批处理命令是由cmd来逐行进行解释的
set a=test
call :sub %a%
例如这两行命令,第二行在执行之前,cmd已对其进行了扩展,其实执行的是
call :sub test

cmd也可以实现类似按值传递的模仿

set a=test
call :sub1 %a%
echo %a%

:sub1
setlocal
echo %1
set a=sub1
endlocal
goto :eof

TOP

返回列表