面試題-指標-指標與指標的引用
問題:
問:下面程式碼編譯執行之後是否正常執行?
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;//正確