带默认参数的函数
在说明函数原型或者定义函数时,可为参数指定缺省值
void showmsg(char * text, int length=-1,int color=0);
作用域::
在变量名前冠以作用域运算符::,来访问全局变量
无名联合
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现
无名联合定义在一个结构或类类型的内部,在关键字union后面没有给出名字
它可使一组数据项共享统一内存
其成员直接作为所在结构或类中的成员来使用
struct worker
{
char num[6];
char name[12];
shor kind;
union
{
char cadre[7];
char teacher[12];
short worker;
};
};
struct worker employee;
employee.cadre = “kezhang”;
强制类型转换
int i = 10;
float x = float(i); //类型名作为函数名使用
new和delete
动态分配和删除存储块
new分配一个足以放下指明类型对象的存储空间,然后返回该存储块的首地址
delete作用于指向该存储块的指针,删除该存储块
struct node
{
char *string;
int value;
}
node *pnode;
pnode = new node;
pnode ->value = 1;
delete pnode;
可以用new为数组动态分配内存空间
必须提供所有维的大小
int *pi = new int[10];
int *pi = new int[2][3][4];
delete []p; //释放动态分配的数组空间,可不指明大小
在为简单变量分配存储空间时可进行初始化
int *p;
p = new int(99);
不能对动态分配的数组初始化
用new分配空间时,如没有足够的内存返回null,所有要检查
int *p;
p = new int(99);
if (!p)
{
cout<<”allocation failure\n”;
}
引用
是某个变量的别名
int i = 5;
int &j = i;
如果引用不是作为函数的参数也不是作为函数的返回类型,它只是普通变量的引用,必须在声明它是引用的时候进行初始化
int i = 5;
int &j = i;
int &j2 = j; //对
int &rint = 5; //错 不能赋常量
int &b[3]; //错 不能建立引用数组
int &*p; //错 不能建立引用的指针
int &&r; //错 不能建立引用的引用
引用不能被重新赋值
引用的地址就是引用变量的地址
引用比指针更直观
若将函数说明为一个引用类型,目的是将该函数用在赋值运算符的左边
int &max(int &num1,int &num2);
int &mix(int &num1,int &num2);
int num1 = 2;
int num2 = 4;
max(num1,num2) = 0;
除了是void类型外的类型都能有引用
引用和const连用防参数被修改
void型指针
表示通用型的指针,任何类型的指针都可以赋给它
void *pc;
int i = 22;
char c = ‘aa’;
pc = &i;
cout<<*(int*)pc<<endl;
pc = &c;
cout<<*(char*)pc<<end;