1、操纵符
dec 把转换基数设置为十进制
hex 把转换基数设置为十六进制
oct 把转换基数设置为八进制
缺省的转换基数是十进制
2、灵活的局部变量说明
在C语言中:局部变量说明必须集中在可执行语句之前。不允许局部变量说明和可执行语句在程序中交替出现.但c++中可以。
3、结构、联合和枚举名可直接作为类型名
在C++中定义变量时,不必在结构名、联合名或枚举名前冠以struct、union或enum,结构名、联合名、枚举名可直接作为类型名。
注:弄清楚什么叫类型名、结构名、枚举名等
比如int fun(int a){ }其中第一个int为返回值类型名,若将其省略,c语言默认为int。

4、const修饰符来定义常量
例如:const float PI=3.14159;
// 常量PI是有类型的,它占用存储单元,有地址,可以用指针指向这个值,但不能修改它。
为什么要使用const:因为#define的不安全性
const可以与指针一起使用,它们的组合情况可归纳为以下三种:
. 指向常量的指针
. 常指针
. 指向常量的常指针
(1) 指向常量的指针是指:一个指向常量的指针变量。
例如: const char* name="chen";
//声明一个名name的指针变量,它指向一个字符型常量,初始化name为指向字符串"chen"
name= "zhang " √
(2) 常指针是指:把指针所指的地址 ,而不是它指向的对象声明为常量。
例如:char* const name="chen";
//声明一个名为name的指针变量,该指针是指向字符型数据的常指针,用“chen”的地址初始化该常指针。
name[3]=′a ′ √
(3) 指向常量的常指针是指:这个指针本身不能改变,它所指向的地址中数据也不能改变。
例如:const char* const name="chen";
//声明了一个名为name的指针变量,它是一个指向字符型常量的常指针,用"chen"的地址初始化该指针。
说明: (1) 如果用const定义的是一个整型常量,关键字int可以省略。
例如:下面的两行定义是等价的:
const int LIMIT=100;
const LIMIT=100;
(2)函数的形参也可以用const说明,用于保证形参在该函数内部不被改动,即在函数中对这些参数只许读,而不许写。
5、函数原型
返回值类型 函数名(参数表);//相当于函数声明
用于说明函数的名称、参数类型与个数,以及函数返回值的类型。
(1) 函数原型的参数表中可不包含参数的名字,而只包含它们的类型。
(2)函数定义由函数说明和函数体两个部分构成。
long Area(int length,int width)//函数的说明部分
{ …return(length*width);}
(3)原型说明中没有指出返回类型的函数(包括主函数main),C++默认该函数的返回类型是int。
(4) 如果一个函数没有返回值,则必须在函数原型中注明返回类型为void。这样在主函数中就不必有“return 0;”了。
(5) f( ); //表示该函数不带任何参数
f(void); //表示该函数不带任何参数,参数表为空(void)
6、内联函数
C++编译器使用函数体中的代码替代函数调用表达式, 这样能加快代码的执行,减少调用开销。
说明:
(1) 内联函数在第1次被调用之前必须进行完整的定义,否则编译器将无法知道应该插入什么代码。
(2) 在内联函数体内一般不能含有复杂的控制语句,如for语句和switch语句等。
(3)一般为1~5条语句而使用频繁的函数才定义为内联函数, 这样可大大提高运行速度。
(4) C++的内联函数具有与C中的宏定义 #define相同的作用和相似的机理,但消除了#define的不安全因素。
7、带有默认参数的函数
函数原型说明为:
int special(int x=5,float y=5.3);//x与y就是带有默认参数值
以下的函数调用都是允许的:
special( ); // x=5, y=5.3
special(25); // x=25, y=5.3
special(100,79.8); // x=100,y=79.8
说明:
(1)在声明函数时,所有指定默认值的参数都必须出现在不指定默认值的参数的右边,否则出错。
(2) 在函数调用时,若某个参数省略,则其后的参数皆应省略而采用默认值。不允许某个参数省略后,再给其后的参数指定参数值。
special( , 21,5); ×
(3)在函数原型中默认参数可以不包含参数的名字
void write( int =5);//没有参数名
8、函数的重载
当两个或者两个以上的函数共用一个函数名时,称为函数重载。被重载的函数称为重载函数。
重载函数应在参数个数或参数类型上有所不同,或者二者兼而有之。
说明:
(1) 函数的重载与带默认值的函数一起使用时,有可能引起二义性
(3) 在函数调用时,如果给出的实参和形参类型不相符,C++的编译器会自动地做类型转换工作。如果转换成功,则程序继续执行。
void f_a(int x);
void f_a(long x);
int c=f_a(5.56);//编译器无法确定将5.56转换成int还是long类型
9、作用域运算符::
全局变量
10、无名联合
一种特殊联合,它在关键字union后面没有给出联合名,它可使一组数据项共享同一内存地址。
在此无名联合中,无名联合变量x中的整型成员i和双精度型d具有相同的存储地址。
union data union
{ {
int i; int i;
float f; float f;
} }
11、强制类型转换
int i=10;
double x=(double)i;//C语言
double x=double(i);//C加加, 使得类型转换的执行看起来好象调用了一个函数
12、new与delete动态分配内存和释放动态分配的内存。
C语言使用函数malloc()和free()
C++使用运算符new和delete
指针变量名 = new 类型; //运算符new就从存储区中为程序分配一块与类型字节数相适应的内存空间,并将该块内存的首地址存于指针变量中。很重要的总结!!!
int *p; //声明一个整型指针变量p
p=new int; //new动态分配存放一个整数的内存空间,并将其首地址赋给指针变量p
*p=10;//赋值-方法1
delete 指针变量名 ;//释放p指向的存贮空间
其中,指针变量中存着new分配的内存的首地址。
int* p=new int(99);//赋值-方法2
说明:
(1)char* p=new char[10];
int* op=new int[5][4];
(2) new可在为简单变量分配内存空间的同时,进行初始化。但不能为数组分配内存空间的同时,进行初始化
(3) delete [ ]p;
(4) 使用new动态分配内存时,如果没有足够的内存满足分配要求,new将返回空指针(NULL)。
NULL为空指针常数,通常是 0。
13、引用
作用:为变量另起一个名字,变量的引用通常被认为是变量的别名。
声明: 类型 & 引用名 = 已定义的变量名;//声明了一个整数类型的引用j,用整型变量i对它进行初始化,这时j就可看做是变量i的引用,即是变量i的别名。(也就是说,变量i和引用j占用内存的同一位置。当i变化时,j也随之变化,反之亦然)
说明:
(1)例如下述声明是错误的。
int i;
int &j; //错误
j=i;
应该是:在声明一个引用时,必须立即对它进行初始化
int i;
int &j=i;
(2) int i=5;
int &j1=i;
int &j2=j1;//为引用提供的初始值,可以是一个变量或另一个引用。变量i有两个别名:j1和j2。
(3) 指针是通过地址间接访问某个变量,需要书写间接运算符“*”;
int i=15; //定义整型变量i,赋初值为15
int *iptr=&i; //定义指针变量iptr,将变量i的地址赋给iptr
int &rptr=i; //声明变量i的引用rptr,rptr是变量i的别名
(4) 引用在初始化后不能再被重新声明为另一个变量的引用(别名)。
(5)引用运算符“&”与地址操作符“&”
2、引用作为函数参数
① 用变量做函数参数
② 用指针做函数参数
③ 用引用做函数参数
3、 使用引用返回函数值 P99YE
使用引用可以返回函数的值,采用这种方法可以将该函数调用放在赋值运算符的左边。
网友评论