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

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

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

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

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函数中,不能把ab的指向的值相互交换,因为ab都是指向的是一个不可修改的常量,不能修改常量的值。所以如果把类型改成整型的实参通过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/liubing8609/article/details/86136188