参数就是函数传入的初始变量值,比如int func(int a); 其中a就是参数,此时叫形式参数,只是表明参数的类型。当你调用时,比如func(1);这个1就是个实际参数,表明把1作为func的参数自变量就是所谓的默认参数。当一个函数你使用的时候,可能要传不同的值,但是你还要有个默认值,就是没有参数的时候也用这个值。
比如一个函数计算圆的周长,para表示圆周率,默认用314,但是有时候你可能要精确计算,就要让para=31415926, int func(int a,int para= 314)这样,当你使用的时候,如果不给para赋值,只写func(3),那么实际上编译器写进去的就是func(3,314)当你需要用其他值的时候自行传入。但有一点需要注意的是,当你有多个默认参数的时候,函数只支持从右往左的默认参数,比如int func(int a,int b=1,int c=2);这样是可以的,但是int func(int a=1,int b,int c=2)就不行了,这和参数入栈顺序有关。
所以要写默认参数,就要放在最右边 函数签名就是编译器给函数的一个标签,就好像是你买食品上的配方一样。比如 int func(int a,int b); 编译器不关心a和b,他俩只是个代号而已,只关心函数的返回类型和参数类型,所以函数签名编译器就写成了int func(int,int); 这个在C++里面主要和函数重载有关系,当你的函数名相同时,只要函数签名不同编译器就认为你重载了函数,就不会报错,同样签名函数的两个函数会被报错。
常量就是不会在运行过程中改变的量,这个量是多少,在你编译的时候已经决定了,不管运行多少次都不会变。
变量是可以在运行过程中改变的量(只是可以改变,并不一定真正改变了)
函数名就是函数的名字
语句标号只是编辑器或IDE在前面带的数字用来表明这行是第几了,方便调试,10年前是个重要概念,现在可以扔在垃圾堆里,因为现在不再需要这个了,现在工具都很智能。
类型定义符 就是类型的定义符, 都是字面上的意思了
另外这几个概念里面真正对你学编程有用的只有常量和变量。函数名也算有用,但是事实上更多使用的是“函数签名”而不是函数名 (函数签名=函数名+参数列表) 至于剩下那两个基本上你可以不管,语句标号早已经完全没有用了,而类型定义符则只是个教学用的概念。。。你可以随便把它叫其他什么的。。。可以不当它是专业词汇,只是 “类型”“定义符”
方法签名由方法的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。需注意的是,方法签名既不包含返回类型,也不包含 params 修饰符(它可用于最右边的参数)。 · 实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。具体说来,实例构造函数的签名不包含可为最右边的参数指定的 params 修饰符。 · 索引器签名由它的每一个形参(按从左到右的顺序)的类型组成。具体说来,索引器的签名不包含元素类型。 · 运算符签名由运算符的名称和它的每一个形参(按从左到右的顺序)的类型组成。具体说来,运算符的签名不包含结果类型。 签名是对类、结构和接口的成员实施重载的机制: · 方法重载允许类、结构或接口用同一个名称声明多个方法,条件是它们的签名在该类、结构或接口中是唯一的。 · 实例构造函数重载允许类或结构声明多个实例构造函数,条件是它们的签名在该类或结构中是唯一的。 · 索引器重载允许类、结构或接口声明多个索引器,条件是它们的签名在该类、结构或接口中是唯一的。 · 运算符重载允许类或结构用同一名称声明多个运算符,条件是它们的签名在该类或结构中是唯一的。
可以定义函数指针,指向某个类型相同的函数,下面小程序就是一个简单例子
#include<stdioh>
int Add(int a,int b)
{
return (a+b);
}
void main(void)
{
int (p)();//定义函数指针
int a=4,b=3;
p=Add;//指向Add函数,注意返回值统一
printf("a+b=%d\n",p(a,b));//使用函数指针进行调用
}
int
fun(int
n)规定了函数的两个要素:
1、函数的返回值类型是整型;
2、函数有一个整型的参数,也就是说在函数调用时必须要给它一个整型数作为参数。
fun()函数内部的C+=fun(i-2)实际上表明这个函数采用了递归型算法。
递归做为一种算法在程序设计语言中广泛应用,就是指一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
你这个程序的递归算法思路就是,当参数n大于2时,就将n-2作为参数再次调用自己,由于每次调用n都会被减2,所以对于任意给定的n,经过有限次调用后,总能让调用参数减小到小于等于2,从而满足边界条件(n==1||n==2),递归调用终止,得到返回值。
void (signal(int sig, void (handler)(int)))(int);
signal函数是UNIX最简单的处理信号的函数
sig 你要处理的信号编号,signal()会依参数sig指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行
handler 是函数指针,你要对这个信号定义什么样的处理方式。如果参数handler不是函数指针,则必须是下列两个常数之一:
SIG_IGN 忽略参数sig 指定的信号。
SIG_DFL 将参数sig 指定的信号重设为核心预设的信号处理方式。
详情请见http://baikebaiducom/view/64630htm
数字签名主要经过以下几个过程:
信息发送者使用一单向散列函数(HASH函数)对信息生成信息摘要;
信息发送者使用自己的私钥签名信息摘要;
信息发送者把信息本身和已签名的信息摘要一起发送出去;
信息接收者通过使用与信息发送者使用的同一个单向散列函数(HASH函数)对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过。
数字加密主要经过以下几个过程:
当信息发送者需要发送信息时,首先生成一个对称密钥,用该对称密钥加密要发送的报文;
信息发送者用信息接收者的公钥加密上述对称密钥;
信息发送者将第一步和第二步的结果结合在一起传给信息接收者,称为数字信封;
信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,得到真正的原文。
数字签名和数字加密的过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。数字加密则使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。另外,数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息保密性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)