指针:指针指向一块内存,它的内容是所指内存的地址。
引用:引用是某块内存的别名。
指针与引用的区别如下:
1、引用必须初始化,指针可以不用初始化。
编译报错如图:
2、在sizeof中含义不同,引用表示引用类型的大小,指针始终是地址所占的字节数。
int main()
{
int c1 = 10;
int &c2 = c1;
int *p = &c1;
/*char c1 = 'a';
char &c2=c1;
char *p=&c1;*/
cout << "c2:" << c2 << " ";
cout << "\n" << " ";
cout <<"sizeof(c2):"<< sizeof(c2) << " ";
cout << "\n" << " ";
cout <<"sizeof(p):"<< sizeof(p) << endl;
cout << "\n" << " ";
cout << "c2++:" <<++c2<<" ";
cout << "\n" << " ";
cout << "p++:" << ++p << " ";
system("pause");
return 0;
}
int型运行结果:
char型运行结果:
3、指针可以指向不同的变量,但引用只能指向所引用的变量。
char c1 = 'a';
char c3 = 'd';
char &c2=c1;//c2引用c1
char *p=&c1;//p指向c1
c2 = c3;//c2仍引用c1,但此时c1的值为d
p = &c3;//此时p指向c3
改变引用指针指向之前打印的结果:
改变引用指针指向之后打印的结果:
4、没有NULL引用,但有NULL指针。
int c1 = 10;
int &c2 = NULL;
int *p = NULL;
编译报错如图:
5、int **p,二级指针,int &&p,为幼稚引用;有多级指针,无多级引用。
6、引用比指针安全。
7、指针自增和引用自增意义不同。指针自增,指向另一块内存空间,引用自增,引用的变量加1。
int main()
{
int c1 = 10;
int &c2 = c1;
int *p = &c1;
cout << "c2:" << c2 << " ";
cout << "\n" << " ";
cout << "c1:" << c1<< " ";
cout << "\n" << " ";
cout <<"p:"<< (int)p << " ";
cout << "\n" << " ";
cout << "c2++:" <<++c2<<" ";
cout << "\n" << " ";
cout << "p++:" << (int)++p << " ";
system("pause");
return 0;
}
运行结果: