面试_指针与引用

本文简要介绍指针与引用的区别,强调指针可为NULL且可修改,而引用则是对象的别名不可改变。同时提及动态内存传递的概念。文章引用其他博客资源,探讨了char *p = "hello world!"与char p[] = "hello world!"的差异,指出前者声明的是指针,后者声明的是数组。
摘要由CSDN通过智能技术生成

本文只是简单的介绍一下指针与引用,因为指针的内容太多了(想一想,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值