以指標作為引用引數(二)
阿新 • • 發佈:2018-12-18
題目(一):編寫一個函式,把一個整數陣列中的前n個元素複製到另一個數組的前端。其中一個數組應該為常量引數,另一個數組應為為普通的陣列引數。
#include<iostream> using namespace std; //傳入其中一個數組為常量引數,另一個數組為普通陣列 //因為需要改變陣列A的內容,所以引數為普通陣列,不需要改變陣列B的的內容,所以為常量引數(const) void copy_to_front(int target[], const int source[],size_t m); int main() { int A[3] = {0}; int B[] = { 444,555,666 }; copy_to_front(A,B, sizeof(B) / sizeof(B[0])); for (int i = 0; i < sizeof(A)/sizeof(A[0]); i++) { cout << A[i] << " "; } cout << endl; system("pause"); return 0; } void copy_to_front(int target[],const int source[],size_t n) { for (int i = 0; i < n; i++) { target[i] = source[i]; } }
可以看到,因為target[]在函式中元素的內容會被賦值,所以不能傳遞常量引數。對於陣列source[]陣列,只希望讀取其元素內容,並不希望它改變,所以最好傳遞常量引數。
題目(二):在函式中建立動態陣列,將陣列A和陣列B首位相接組成一個新陣列
#include<iostream> using namespace std; int*& copy_to_front(const int A[],int n,const int B[],int m); int main() { int A[] = { 1,2,3}; int B[] = { 444,555,666 }; int *p = copy_to_front(A,sizeof(A)/sizeof(A[0]),B,sizeof(B)/sizeof(B[0])); for (size_t i = 0; i < sizeof(A) / sizeof(A[0]) + sizeof(B) / sizeof(B[0]);i++) { cout << p[i] << " "; } cout << endl; system("pause"); return 0; } int*& copy_to_front(const int A[],int n,const int B[],int m) { int final = m + n; //在這裡動態建立一個數組p,你看p陣列中元素個數(final)是由程式呼叫copy_to_front才確定下來的 //我們應該清楚滴知道,返回值最後應該是這個指標p的引用,所以使用int*&表示返回指標的引用! //為了簡潔,我們當然可以使用typedef int* p_ptr; int *p = new int[final]; for (size_t i = 0; i < final; i++) { if (i<n) p[i] = A[i]; else p[i] = B[i - n]; } //注意最後返回的是指標的引用哦哦哦,所以使用的就是int*& 返回值啦 return p; }
可以發現,陣列作為函式引數傳遞的都是常量引數,在函式中動態建立陣列,最後返回指向這個動態陣列的指標,所以返回的是指標引用!和前一篇的開篇提到:在程式中使指標指向一個新的位置,這是指標作為函式引數傳遞的唯一情況!(type_name*&)
輸出: