1.引用
程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
int ival=2;
int &refval=ival;
ival=8; //此时 refval=8;
int i=refval //i的值为8
int &refval; //报错:引用必须初始化
int &refval=10;//报错:引用类型的初始值必须是一个对象
double dval=9;
int &refval2=dval;//报错:引用类型的初始值必须是一致,是int.
2.指针
指针本身就是一个对象,允许对指针赋值和拷贝,而且指针的生命周期内它可以先后指向几个不同的对象
指针无需在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有初始化,也将拥有一个不确定的值。
int ival=9;
int *p=&ival;
double dval;
double *pd=&dval; //正确:初始值是double型对象的地址
double *pd2=pd; //正确:初始值是指向double对象的指针
指针值:
1.指向一个对象。
2.指向紧邻对象所占空间的下一个位置。
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况之外的其他值。
指针访问对象
int ival=9;
int * p=&ival;//p存放着变量ival的地址,或者说p是指向变量ival的指针。
cout<<*p //由符号*得到指针p所指向的对象,输出9.
int *p1=nullptr; //等价于int *p1=0;
int *p2=0;//直接将p2初始化为字面常量0
指针使用例子
#include "stdafx.h"
#include <iostream>
using namespace std;
void Swap(int *x,int * y)
{
*x^=*y;
*y^=*x;
*x^=*y; }
int _tmain(int argc, _TCHAR* argv[])
{ int a=;
int b=;
Swap(&a,&b);
cout<<"a="<<a<<endl; //a=8
cout<<"b="<<b<<endl; //b=6 system("pause");
return ;
}
char* str = "hello";
while (*str != '\0')
{
cout << *str;
str++;
}
//输出hello char* str1 = "hello";
while (*str1 != '\0')
{
cout << *str1++; }
//输出hello
system("pause");
return ;