本文只是简单的介绍一下指针与引用,因为指针的内容太多了(想一想,c和指针这一本书才能把指针讲完,怎么可能一遍博客就把指针的内容讲完嘛,根本不可能啊)。小编主要是根据面试宝典上面的内容来解释指针域引用。汗~~~~~~·
1.指针与引用的区别
指针:指向一块存取区域的地址; 可以为NULL;使用之前测试是否为NULL;可以修改,使其指向不同的对象
引用:是某个对象的别名。 不可以为NULL;使用之前不测试; 不可以修改,只能是初始化的对象
面试题1:指出下面程序的错误之处
int main()
{
int iv;
int iv2 = 1024;
int iv3 = 999;
//int &reiv; //error:声明引用,但是引用不能为NULL,必须同时对其初始化
int &reive2 = iv;
int &reive3 = iv;
int * pi;
*pi = 5; //error:此时声明了指针变量,但是没有对其分配内存空间,如果现在对指针赋值,就会报错,因为它不知道把赋的值放到哪个存储空间里面; 解决:给pi分配内存 int *pi = new int;
pi = &iv3;
//const double di; //没有初始化
const double maxWage = 10.0;
const double minWage = 0.5;
const double *pc = &maxWage;
cout<<pi;
getchar();
return 0;
}
2.传递动态内存
面试题2:交换数据
void swap1(int p, int q)
{
int temp;
temp = q;
q = p;
p = temp;
}
void swap2(int *p, int *q)
{
int *temp;
*temp = *p;//如果再Dev中这里会报错,因为temp没有分配内存;但是在vs中,系统拷贝时会临时给了一个地址,让它存值,在函数结束后,这个临时的地址也木有被系统收回,所以会造成内存泄露
*p = *q;
*q = *temp;
}
void swap3(int *p, int *q)
{
int *temp;//该方法只是修改了p,q指针的指向,但并没有交换先前p,q指向的对象的值
temp = p;
p = q;
q = temp;
}
void swap4(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void swap5(int &p, int &q)//使用了引用,因此p,q的值发生改变,则它们引用的变量也同样发生了改变
{
int temp;
temp = p;
p = q;
q = temp;
}
int main()
{
int a =1 , b = 2;
s