函数调用

宏,内联函数和普通函数的区别

好久不见. 提交于 2020-04-04 07:56:29
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。 使用内联函数时,应注意以下问题: 1)内联函数的定义性声明应该出现在对该函数的第一次调用之前。 2)内联函数首先是函数,函数的很多性质都适用于内联函数,如内联函数可以重载。 3)在内联函数中不允许使用循环语句和switch结果,带有异常接口声明的函数也不能声明为内联函数。 先说宏和函数的区别: 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的. 3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间. 4. 宏的参数是不占内存空间的,因为只是做字符串的替换

实现多级下拉列表

若如初见. 提交于 2020-04-04 06:32:02
MS-SQL 里有个“department”表,由departmentID, departmentName, parentDeptID三个字段组成,如果没有parentDept,则parentDeptID=0. department在表中是任意规则排序的。 现在要根据这个关系来实现一个多级的下拉列表。效果类似于下面 计算机学院 ---计算机系 ---新媒体艺术系 外语学院 ---英语系 ---德语系 如何从department表中取出所有数据动态生成呢?现在MSSQL里边写个函数GetSubTree,得到某个departmentID的所有下属department 具体代码请参考 这里 .(会把某个department的层数求出) 然后写一个存储过程调用这个函数来实现一些美观字符的添加, 参数为parentID。 最后在程序里调用存储过程。取出某个departmentID的所有子department。注意这里只是得出某个最高级别department的子树。如何得出全部的呢? 先求出所有的parentDeptID为0的一个DataTable dtChild,然后遍历其每一行并求出相应的子树,添加到另外一个DataTable dtAll中,最后 DropDownList.DataSource = dtAll.就OK了。 虽然是一个小功能,却费了不少周折,希望有心人能把它写成控件就好了。

CreateDIBSection

流过昼夜 提交于 2020-04-04 04:21:09
  函数功能:该函数创建应用程序可以直接写入的、与设备无关的位图(DIB)。该函数提供一个指针,该指针指向位图位数据值的地方。可以给文件映射对象提供句柄,函数使用文件映射对象来创建位图,或者让系统为位图分配内存。   函数原型:HBITMAP CreateDIBSection(HDC hdc,CONST BITMAPINFO *pbmi,UINT iUsage,VOID** ppvBits,HANDLE hSection,DWORD dwOffset);   参数:   hdc:设备环境句柄。如果iUsage的值是DIB_PAL_COLORS,那么函数使用该设备环境的逻辑调色板对与设备无关位图的颜色进行初始化。   pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。   iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。下列值是系统定义的,其含义为:   DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。   DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。   ppvBits:指向一个变量的指针

opencv-图像形态学之膨胀腐蚀

不羁岁月 提交于 2020-04-04 03:58:10
转自: https://blog.csdn.net/poem_qianmo/article/details/23710721 一、原理 1.1 形态学概述 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。而我们图像处理中指的形态学,往往表示的是数学形态学。下面一起来了解数学形态学的概念。 数学形态学(Mathematical morphology) 是一门建立在 格论和拓扑学 基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。 简单来讲,形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种:膨胀与腐蚀(Dilation与Erosion)。 膨胀与腐蚀能实现多种多样的功能,主要如下: 消除噪声 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。 寻找图像中的明显的极大值区域或极小值区域 求出图像的梯度 我们在这里给出下文会用到的,用于对比膨胀与腐蚀运算的“浅墨”字样毛笔字原图: 在进行腐蚀和膨胀的讲解之前,首先需要注意,腐蚀和膨胀是对白色部分(高亮部分

jQuery 事件与事件对象

自闭症网瘾萝莉.ら 提交于 2020-04-03 23:06:11
一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解. 二.前言 本篇文章是至今为止本系列内容最多的一篇, 足以可见其重要性. 大家反映要多列举示例. 我会在时间允许的情况下尽量多列举示例. 真正的投入生产使用的实例暂时还无法加入到文章中, 但是可能最后我会列举一些作品供大家借鉴. 另外本人水平有限, 因为我不是UI设计师. 文章可能有错误的地方, 希望大家帮忙指出, 一起学习一起进步. 在技术的世界里我们是没有任何利益瓜葛. 希望大家都抱着彼此鼓励的心态, 对于回复中的激进评论我也都会考虑, 但是希望能够彼此尊重, 保护博客园这片程序员的净土! 三.事件与事件对象 曾经在我的 " Javascript公共脚本库系列(二): 添加事件多播委托的方法 " 和 " Javascript公共脚本库系列(三): 格式化事件对象/事件对象详解 " 两篇文章中, 曾讲解过javascript中的事件和事件对象. 首先看一下我们经常使用的添加事件的方式: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns

Windows Socket编程简介

喜欢而已 提交于 2020-04-03 22:16:03
WinSock编程 使用WinSock API的编程,应该了解TCP/IP的基础知识。虽然你可以直接使用WinSock API来写网络应用程序,但是,要写出优秀的网络应用程序,还是必须对TCP/IP协议有一些了解的。 1. TCP/IP协议与WinSock网络编程接口的关系 WinSock并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把他当作一些协议的封装。现在的WinSock已经基本上实现了与协议无关。你可以使用WinSock来调用多种协议的功能。那么,WinSock和TCP/IP协议到底是什么关系呢?实际上,WinSock就是TCP/IP协议的一种封装,你可以通过调用WinSock的接口函数来调用TCP/IP的各种功能.例如我想用TCP/IP协议发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能。 2、TCP/IP协议介绍 TCP/IP协议包含的范围非常的广,他是一种四层协议,包含了各种硬件、软件需求的定义。 TCP/IP协议确切的说法应该是TCP/UDP/IP协议。UDP协议(User Datagram Protocol 用户数据报协议),是一种保护消息边界的,不保障可靠数据的传输。TCP协议(Transmission

unix环境高级编程——文件IO

南楼画角 提交于 2020-04-03 22:11:16
可用的文件IO函数:打开文件,读文件,写文件等(不带缓冲的IO函数(指每个read或write函数都调用内核的一个系统调用))    不是ISO C的组成部分,但是时POSIX和SUS的组成部分 UNIX系统中常用的文件IO函数:open,read,wirte,lseek,close函数 当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符(非负整数) UNIX的shell把文件描述符0与标准输入关联,文件描述符与标准输出关联,文件描述符2与标准错误输出关联,在POSIX标准中,对应的被替换为符号常量STDIN_FLLENO,SEDOUT_FLLENO,STDERR_FLLENO  <unistd,h> 函数open和openat (fcntl.h) int open(const char* path,int oflag,.../*mode_t mode*/); int openat(int fd,const char* path,int oflag,.../*mode_t mode*/); 将最后一个参数写为...,表明余下的参数的数量以及类型是可变的 由open和openat函数返回的文件描述符一定是最小的未用的描述符数值 若path参数指定为绝对路径,fd参数无用,openat函数相当于open函数    path指定的是相对路径

setTimeout和setInterval

两盒软妹~` 提交于 2020-04-03 16:34:54
(转自: http://www.mxria.com/helps/js_error/trap_error_1572.htm ) 由于 JavaScript 是异步的,可以使用 setTimeout 和 setInterval 来计划执行函数。 注意:定时处理不是ECMAScript 的标准,它们在 DOM (文档对象模型) 被实现。 function foo(){}var id = setTimeout(foo,1000);// 返回一个大于零的数字 当 setTimeout 被调用时,它会返回一个 ID 标识并且计划在将来大约1000 毫秒后调用 foo 函数。 foo 函数只会被执行一次。 基于 JavaScript 引擎的计时策略,以及本质上的单线程运行方式,所以其它代码的运行可能会阻塞此线程。 因此没法确保函数会在 setTimeout 指定的时刻被调用。 作为第一个参数的函数将会在全局作用域中执行,因此函数内的 this 将会指向这个全局对象。 functionFoo(){this.value =42;this.method =function(){// this 指向全局对象 console.log(this.value);// 输出:undefined}; setTimeout(this.method,500);}newFoo(); 注意: setTimeout

Python开发基础-Day20继承实现原理、子类调用父类的方法、封装

北城余情 提交于 2020-04-03 01:56:49
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先。 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有共同头部父类的类型 1 class E: 2 def test(self): 3 print('from E') 4 # pass 5 class F: 6 def test(self): 7 print('from F') 8 # pass 9 10 class C: 11 def test(self): 12 print('from C') 13 # pass 14 15 class B(C): 16 def test(self): 17 print('from B') 18 # pass 19 20 class D(E): 21 def test(self): 22 print('from D') 23 # pass 24 class A(B,D,F): 25 def test(self): 26 print('from A') 27 # pass 28 obj=A() 29 obj.test() 在这种模型下,新式类和经典类的继承顺序都一样。 调用obj.test(),首先找boj对象的__dict__字典,然后找生成类A的__dict__字典,如果这两个都没有

02函数-01-函数的定义和调用

♀尐吖头ヾ 提交于 2020-04-03 01:21:46
1、定义函数 function abs(x) { if (x >= 0) { return x; } else { return -x; } } 7 1 function abs(x) { 2 if (x >= 0) { 3 return x; 4 } else { 5 return -x; 6 } 7 } 如果没有return,函数执行完毕也会返回结果,不过结果是undefined。 由于在JS的世界中,函数也是一个对象,所以上述定义的 函数实际上也是一个对象 ,而 函数名则可视为指向该函数的变量 。 所以上面的函数定义等价于: var abs = function (x) { if (x >= 0) { return x; } else { return -x; } }; 7 1 var abs = function (x) { 2 if (x >= 0) { 3 return x; 4 } else { 5 return -x; 6 } 7 }; 2、调用函数 JS的函数允许任意个,也不影响调用,接以上的abs函数: //比定义的参数多 abs(10, 'blablabla'); // 返回10 abs(-9, 'haha', 'hehe', null); // 返回9 //比定义的参数少 abs(); // 返回NaN --> 此时abs(x