有兩種傳遞方法,一種是function(int a[]); 另一種是function(int *a)
這兩種兩種方法在函數中對數組參數的修改都會影響到實參本身的值!
對于第一種,根據之前所學,形參是實參的一份拷貝,是局部變量。但是數組是個例外,因為數組的資料太多了,将其一一指派既麻煩又浪費空間,是以數組作為參數傳遞給函數的隻是數組首元素的位址,資料還是在記憶體裡的,函數在需要用到後面元素時再按照這個位址和數組下标去記憶體查找。也就是說後面的元素根本沒到函數裡來。是以,這裡也不能在test()函數内部用sizeof求數組的大小,必須在外面算好了再傳進來。
對于第二種,則是傳址調用,無需再說。
這裡還有幾點需要注意:
1.在以上兩個函數的形參前面加上const則表示整個數組隻讀,而不是隻有首位址對應存儲的資料隻讀。
2.第二種形式不能用C++11中的for…auto來循環列印。
3.數組的大小要用sizeof()來求,不能用.size(),因為.size()隻有struct 或者union才能用, vector算是struct!
4.如果在函數内部又聲明一個int* tmp類型的變量,然後把p指派給tmp, 通過tmp修改數數組也是一樣,都會修改實參本身!