1. 程式人生 > >面試題-指標-指標與指標的引用

面試題-指標-指標與指標的引用

問題:

問:下面程式碼編譯執行之後是否正常執行?

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;//正確