(6)、向函數(shù)傳遞數(shù)組的問題。
考慮下面的問題
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 = {21, 22, 22, 19, 34, 12};
17 cout《Sum(allAges)《endl;
18 system("pause");
19 return 0;
20 }
Sum的本意是用sizeof得到數(shù)組的大小,然后求和。但是實(shí)際上,傳入自函數(shù)Sum的,只是一個(gè)int 類型的指針,所以sizeof(i)=4,而不是24,所以會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。解決這個(gè)問題的方法使是用指針或者引用。
使用指針的情況
1 int Sum(int (*i))
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
11 int main()
12 {
13 int allAges[] = {21, 22, 22, 19, 34, 12};
14 cout《Sum(&allAges)《endl;
15 system("pause");
16 return 0;
17 }
在這個(gè)Sum里,i是一個(gè)指向i類型的指針,注意,這里不能用int Sum(int (*i)[])聲明函數(shù),而是必須指明要傳入的數(shù)組的大小,不然sizeof(*i)無法計(jì)算。但是在這種情況下,再通過sizeof來計(jì)算數(shù)組大小已經(jīng)沒有意義了,因?yàn)榇藭r(shí)大小是指定為6的。
相關(guān)推薦:
2012年下半年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間及入口匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |