C RunTime是用来做什么的?什么时候调用?调用的时候会有什么问题?
你问的是二叉树吧。首先对于lchild 和 rchild,应该明确它们是指针类型。每一个子树本身也是树。所以lchild和rchild应该是指向BitNode类型的指针,所以加了*。
至于*BiTree,你可以认为 BitNode 等价于*BiTree。那么意思不就是,BiTree所指向的空间内容是BitNode类型的数据。如主函数一开始定义的,BiTree T。此处的T就是指向BitNode的一个指针。说白了程序中凡是用BiTree定义的,都可以用BitNode*来替换。对于初始化函数InitBiTree。他的参数为一个指向BiTree的指针。函数体应该错了吧。应该是*T=NULL;主函数调用该函数时,把主函数用T的地址传递给了形参T。即,实参是&T。想想看,如果我们改变T里面的值(实际上是一个地址),这是我们的初衷吗,T里面的值是用来寻找我们真正要操作的单元的。用*T便指向了我们所要的单元(我指的是函数体内的操作。)。二叉树的一系列函数中,你会发现有的是会改变二叉树本身的结构的。比如初始化,我们让一个新树指向NULL。还有接下来的CreateBiTree。涉及到结点的插入。这也是改变二叉树结构。其中的递归调用CreateBiTree(&((*T)->lchild)); *T的意思是找到T所指的BiTree类型的数据。这个数据才能使用lchild。前面的&就是取lchild的地址。因为函数声明,参数要的是BiTree*。取地址,赋给BiTree* T (T里面放的就是地址)。主函数里面出现的函数叫做调用。前面加&。就是取地址,传递给形参。还有就是一些不改变二叉树的结构的函数。比如PreOrderTraverse(T->lchild);它只是把二叉树的内容输出去。该函数,实参把自己的值赋给形参,之后形参的所有操作都与实参无关。即形参自己开辟了一块空间,空间里的值都是照实参原样复制一遍。然后函数的操作就是在形参这片空间里完成的。也就是说,如果要改变二叉树的结构内容,就要用指针做参数。如果不需要改变,用指针倒显得多余,用普通的值传递就可以了。定义变量时,出现了*,则表示定义了指针。在使用指针变量时,出现*,那也是加在变量前面的。这个是对指针所指的单元进行直接操作。希望对你有所帮助。
这涉及一个效率问题。记住,调用函数的开销是很大的,所谓的空间开销是指调用函数前,先要将原来的函数保存在寄存器(占用寄存器空间)里面,并在调用结束后恢复。调用函数时,还要复制实参(占用内存空间)。如果被调用函数一旦调用频繁,就会花费很多空间。如果你有一段“短小而频繁调用的函数”,内联是个不错的选择。
“如果含有复杂的分支或循环结构,我使用inline会有什么后果?”
事实上,所谓内联,是编译器将内联函数在函数调用点上展开函数代码。例如
inline int small(int a,int b) { return a < b ? a : b ; }
cout << small ( a, b ) << endl ;等同于
cout << (a < b ? a : b) << endl; 编译器会将函数调用语句转换为函数代码,再进行编译。inline只是你给编译器提一个建议,希望它将函数内联,至于它会不会执行就不一定了。
基本上复杂的函数它是不会同意的,就算同意了,也只会使你的编译变得更将浪费时间,而执行速度得不到什么提升。还有,一些编译器是不会通过含有递归的内联函数的。
记住,短小而且反复调用的函数进行内联就可以了。
只有编译时,你 特别 规定了只用静态库,运行 程序 的时候 才不去调 动态链接库。
凡没有 特别 规定了只用静态库, 运行 程序 的时候 就调用 动态链接库。有许许多多动态链接库。
调用的时候会有什么问题 -- 如果程序 有错,例如 你用 0 做 分母了,负数开平方了,数组下标超界了,scanf语句中,应当用 &a,&b 却写了 a,b, 就会有 RunTime (运行 程序 的时候)的错误发生。
邬詹托平: 运行期库是一个广泛的概念,可以认为是一套系统级的函数库,这些函数要么在后台被使用,比如进行程序的初始化和清理操作,要么是我们会直接调用到的,比如内存管理中的malloc、数学计算中的sqrt等,所谓运行期,就是在程序运行时使...
隆尧县18656828083: C RunTime是用来做什么的?什么时候调用?调用的时候会有什么问题? - ?
邬詹托平: RunTime 就是运行 程序 的时候.只有编译时,你 特别 规定了只用静态库,运行 程序 的时候 才不去调 动态链接库.凡没有 特别 规定了只用静态库, 运行 程序 的时候 就调用 动态链接库.有许许多多动态链接库.调用的时候会有什么问题 -- 如果程序 有错,例如 你用 0 做 分母了,负数开平方了,数组下标超界了,scanf语句中,应当用 &a,&b 却写了 a,b, 就会有 RunTime (运行 程序 的时候)的错误发生.
隆尧县18656828083: 什么是加载器,什么是cruntime函数,这属于什么方面的知识? - ?
邬詹托平: 加载器(英语:Loader),又译为加载器、加载程序,是操作系统的一部份,负责程序的加载.它是程序运行中不可或缺的一个步骤,加载器会将程序置放在存储器中,让它开始运行.加载程序的步骤包括,读取可执行文件,将可执行文件的内...
隆尧县18656828083: vc cruntime是什么意思 - ?
邬詹托平: 对于每个CObject派生的类,都有一个CRuntimeClass结构. CRuntimeClass就是专门用来记录关于某个类的信息(诸如类名、大小等),在MFC中,它主要被用来记录CObject类的信息,当然一切从CObject派生的类都通过CRuntimeClass来记...
隆尧县18656828083: runtime实现的机制是什么,有哪些用法,一般用于干嘛 - ?
邬詹托平: runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入1.是什么1> runtime是一套比较底层的纯C语言API, 属于1个C语...
隆尧县18656828083: VC++安装文件夹里面的CRT文件夹是做什么用的? - ?
邬詹托平: CRT 全称:Visual C++ C RunTime Lib 就是C运行时库. 注: 以下内容部分引自CSND中相关讨论的帖子,并结合自己的理解整理而成.仅供参考. 1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你...
隆尧县18656828083: microsoft visual c++ 2013 runtime有什么用?
邬詹托平: turbo c 是老古董了,是DOS时代的C语言编译器. Visual c++ 主要是用来编译c++的,当然对c语言也是兼容的.,不过个人建议不要用Visual c++. 首先VC对于初学者来说操作和调试比较复杂,其次几百兆的体积也过于臃肿,很多类库一般也用不到.而且VC无论什么版本都与微软的字符在兼容性上存在问题,所以能不用它就不要去用. 如果你想要一个体积小巧,操作简单,支持鼠标和中文字符的话.WinTC是个不错的选择.
隆尧县18656828083: microsoft C Runtime Library什么作用?用金山卫士进行插件清除是检测到这个插件为风险插件 - ?
邬詹托平: microsoft C Runtime Library是微软的系统组件,若清除的话,有可能会导致某些需要该组件的软件无法启动!请楼主参考!
隆尧县18656828083: java的Runtime是什么类? - ?
邬詹托平: 用来调用本地程序的类,jdk自带的,比如你用Runtime类可以像在cmd命令行里面执行命令一样执行程序 Runtime runtime = Runtime.getRuntime(); Process exec = runtime.exec(command);通过Runtime的exec方法执行命令,exec有几个重载的方法,自己看下jdk的中文api解释就理解了,比如 Process exec = runtime.exec("ipconfig");你通过Process类可以获取这个命令的执行结果
隆尧县18656828083: 在C++编程中各种文件的后缀所代表的意义 - ?
邬詹托平: .obj 概述程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了,这个文件不需要动,也不需要你手动操作. .lib是链接库文件,主要用来跟dll或者库函数连接使用,对于初学...