C++sizeof使用規(guī)則及陷阱分析(2)

字號(hào):

(6)、向函數(shù)傳遞數(shù)組的問(wèn)題。
    考慮下面的問(wèn)題:
    1 #include
    2 using namespace std;
    3
    4 int Sum(int i[])
    5 {
    6 int sumofi = 0;
    7 for (int j = 0; j < sizeof(i)/sizeof(int); j++) //實(shí)際上,sizeof(i) = 4
    8 {
    9 sumofi += i[j];
    10 }
    11 return sumofi;
    12 }
    13
    14 int main()
    15 {
    16 int allAges[6] = {21, 22, 22, 19, 34, 12};
    17 cout<    18 system("pause");
    19 return 0;
    20 }
    Sum的本意是用sizeof得到數(shù)組的大小,然后求和。但是實(shí)際上,傳入自函數(shù)Sum的,只是一個(gè)int 類(lèi)型的指針,所以sizeof(i)=4,而不是24,所以會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。解決這個(gè)問(wèn)題的方法使是用指針或者引用。
    使用指針的情況:
    1 int Sum(int (*i)[6])
    2 {
    3 int sumofi = 0;
    4 for (int j = 0; j < sizeof(*i)/sizeof(int); j++) //sizeof(*i) = 24
    5 {
    6 sumofi += (*i)[j];
    7 }
    8 return sumofi;
    9 }
    10