C++学习笔记二
来源:互联网 发布:中小学教育网网络课程 编辑:程序博客网 时间:2024/05/23 23:09
这两天主要看了控制语句和函数及预处理两个章节的内容。控制语句这一块和前面所学的高级语言都是大同小异,所以很快就过了一遍。
函数和预处理这一章里,关于函数讲的东西和C基本一致,但是有一些之前没用过的东西还是在这里列出来。
1.函数的参数传递中的引用传递:按照书本的解释,引用是给一个已知变量起个别名,之后对引用进行操作就可以对被这个引用多引用的变量进行操作。引用的使用方法如下:
int val;
int &refval = val;这里refval就是val的引用,赋值语句refval=3则val的值也变为3,val=4,则refval的值也变为4。但是我对引用和指针有点搞不清楚了,书上列出引用不同于指针之处就是不能动态分配内存。函数使用引用的方式传递参数例子如下:
void main(){
int a=2,b=10;
swap(a,b);
}
void swap(int &x,int &y){...}
这样的话就相当于把变量a和b的地址传过去了。那么swap中如果改变了x和y的值,那么a和b的值也会被改变。
2.函数的默认参数值:
允许函数的说明或定义时给一个或多个参数指定默认值。在调研时,可以不给参数,按指定的默认值进行工作。举例如下:void initialize(int p1,int p2=0)//注意,这样的定义形式是在代码开头的函数说明部分,而不是在代码中间的函数。所以如果这样的调用是正确的:initialize(1),参数P2会自动初始化为0。
需要注意,默认参数不能放在中间,否则无法判断哪些参数使用默认值。
可以通过重新说明函数使本来不带默认值的参数带上默认值,但是在一个文件中,函数的某一参数只能在一次说明中指定默认值。举例如下:
void f1(int p1,int p2=0);
void f1(int p1=1,int p2);//这样是合法的
然而下面:
void f1(int p1,int p2=0);
void f1(int p1,int p2=1);//这样是不合法的,因为在同一个文件中对一个参数多次指定了默认值。
为了更清楚地说明这个概念,用以下代码作为提醒:
#include <iostream.h>
void init(int p1,int p2=0);
void init(int p1=1,int p2);
void main()
{
init();
init(0);
init(1,1);
}
void init(int p1,int p2)
{
cout << "p1=" << p1 << ",";
cout << "p2=" << p2 << ",";
}
输出的结果如下:
p1=1,p2=0
p1=0,p2=0
p1=1,p2=1
可能会犯错的地方是第一个声明声明p2为0,第二个声明只声明了p1为1,容易以为第二个声明会使第一个声明的p2无效,其实不会。
3.内联函数:用inline关键字声明。就是在调用内联函数时编译程序会自动用函数体代替函数调用,可以节省出栈入栈等开销,提高运行速度,但是以更长的代码长度为代价。另外,内联函数中不能定义任何静态变量,使用任何循环、switch、goto语句,不能说明数组,不能是递归的。
4.静态局部变量:局部变量的空间分配是在执行到变量所在的局部域的时候,程序离开局部域,局部变量所占空间就会被释放,因为每次执行到局部域使用该变量时都要从新初始化。而静态局部变量的值能一直保持,而且可以由系统隐式初始化为0。举例如下:
int i;
for(i=0; i<3; i++)
{
int temp=1;
static int perm=1;
cout << "temp=" << temp <<",perm=" << perm <<endl;
++temp;
++perm;
}
程序的执行结果如下:
temp=1,perm=1
temp=1,perm=2
temp=1,perm=3
5.静态全局变量:只能在定义的文件内访问的全局变量
6.函数前加static关键字:和静态全局变量作用相同,只能在定义它的文件中使用。内联函数和定义为const的常量和函数都是隐含的静态变量。
7.域运算符:当有同名的局部变量和全局变量时,在变量前加::表示使用的是全局变量。
8.外部变量,使用另一个文件定义的非静态全局变量。在说明外部变量时不能给变量赋上初值,否则出错,关键字extern。
9.宏定义:比较简单,要注意的是宏后面的定义的表达,如:#define hong (hong2+10)如果使用以下形式会出错#define hong hong2+10。即括号不能省略。可以在宏定义里使用另外的宏定义,如上面的hong2就是另外的宏定义。
10.头文件:用<>指由系统提供的并放在指定目录中的头文件,用" "指用户自己定义的放在当前目录或其他目录下的头文件或源文件。注意,可以将宏定义组成一个文件,然后可以用#include命令将这些符号常量包含到自己所写的源文件中。
说的比较啰嗦,但是都是我认为对自己比较重要且容易忽略的细节。另外,我用的这本教材《C++程序设计》(清华大学出版社 李春葆 章启俊编著)应该是不适合初学者使用的,对于学习过高级语言,特别是C的人这本教材还是有所帮助的,如果是入门的人,看谭浩强写的书应该会比较好,毕竟讲的很详细。
- 学习《c++primer》笔记二
- c语言学习笔记二
- C语言学习笔记<二 >
- C/C++学习笔记(二)
- Objective-c 学习笔记(二)
- Objective C学习笔记(二)
- Objective-C 学习笔记二
- c学习笔记(二)
- 《Programming.C#》学习笔记二
- C语言学习笔记二
- 《C++.Primer.Plus》学习笔记(二)
- 《C语言宝典》学习笔记(二):概述
- ASP.Net 3.5学习笔记(C#)二
- C语言学习笔记(二)
- 嵌入式学习笔记-C语言(二)
- 《C和指针》学习笔记(二)
- C++学习笔记(Thinking in C++) 二
- c++primer学习笔记(二)
- 一个小程序的栈溢出
- 考试疲劳
- 如何才能成为一名真正的Web程序员
- ASIHTTPRequest 缓存
- 郁闷了一天的hibernate
- C++学习笔记二
- JSP上传文件(如图片)的最简单的Demo
- 用Java模拟表单(或iPhone、Android客户端)上传文件
- 启动慢、系统慢、声音卡
- 页面运行代码
- 怎样尽可能多地发现缺陷,避免遗漏缺陷?
- 作用域种类
- 如何提高工作效率
- VBA使用总结(Oracle使用)