c++语言程序设计-----学习笔记(3)

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第 七 章 函 数

1 静态变量:

局部变量将在运行线程达到其定义时进行初始化,如果有一个局部变量被声明为static,则只有唯一的一个静态对象用来表达该函数所有调用中的这个对象。(即:在调用static型的变量时只会存在一个该变量的副本,所以在此函数中改变了这个变量的话,那么在其他函数中的这个变量就同时的改变了),静态对象将只有在执行线程第一次到达它时初始化。

2 未确定数目的函数的参数:

对有些函数而言,若我们没有办法确定其参数,则可以在参数表后用省略号(…)来结束,如:

int printf (const char *p, …); ////在stdio.h头文件里

但一个良好的程序应该尽量避免用未确定数目的函数的参数,而应该用重载来考虑所有可能的情况。

(我不明白怎么用自己定义的未确定参数数目的函数:有哪位能告诉我好吗?mailto:youki1234@163.com

3 指向函数的指针:

定义:通过取一个函数的地址而得到的指针。作用:可以在后面用于调用这个函数,如:

void error (int s)

{

printf(“%d” ,s );

}

void (*f) (int)=&error;;////定义一个指向一个参数类型为int,返回值类型为void的函数的指针,并把它指向error函数。

void g( )

{

f( ); //通过f()调用error函数;

}

在写法上,由于编译器知道f是一个指针,所以可以不写指针符:*,同理也可以不写取地址符:&;即:

void (*f)(int)=&error; 与

void (*f)(int)=error; 完全等价。

注意:在指向函数的指针声明中也需要给出参数类型,在给函数的指针赋值时也必须注意类型需要完全匹配。

4 宏:

宏在c++中不应该被使用。

宏的名字不能被重载,而且宏预处理器不能处理递归调用;

注意:

在引用全局名字时一定要用作用域运算符 ::,而且在所以可能出现宏的参数的地方用括号括起来,原因:

以下是一个危险的宏:

#define square(a) a*a;

void f()

{

square(xx+2); //被解释成: xx+2*xx+2即:xx+(2*xx)+2

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航