面试题-指针-指针与指针的引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen1083376511/article/details/82721749

返回目录:https://blog.csdn.net/chen1083376511/article/details/82723709

问题:

问:下面代码编译运行之后是否正常运行?

void swap(char *&a, char *&b)
{    char temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    char *stra = "hello";
    char *strb = "world";
    swap(stra, stra);
    return 0;
}

答:

不能。在swap函数中,不能把a和b的指向的值相互交换,因为a和b都是指向的是一个不可修改的常量,不能修改常量的值。所以如果把类型改成整型的实参通过swap函数进行交换是可以实现的。

分析:

我们通常可以利用引用可以在被调函数里面进行双向传递(即改变实参的值),不过也可以通过指针同样能够达到和指针引用的效果,只不过他们之间的实现方式不一样(其实和实参和引用是一样的):指针作为形参是占有内存的,而指针引用并不占。

总结:
1.有引用的变量,在函数里作为参数,是实参的别名,运用时,把它当作实参来使用,它的改变会影响到实参。例如:swap(&a,&b),swap(*&a,*&b)

2.没有引用的变量或者指针变量,在函数里作为参数,是实参的引用,运用时,它只是实参传递给的数据,不可以随便修改实参的数据。swap(a,b),swap(*a,*b)

3.是否实现函数的双向传递,还要看函数里写的是什么。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

问题:

问:以下代码是否正确?

    int a = 1;
    int *&p=a;

答:错误。p作为指针引用在定义时就必须初始化,而赋值对象是指针类型的,很明显a是整型的,并不是指针。所以修改以下代码为:

    int a = 1;
    int *pa = &a;
    int *&p=pa;//正确

猜你喜欢

转载自blog.csdn.net/chen1083376511/article/details/82721749