这个C ++代码是如何工作的?

时间:2013-07-25 06:01:49

标签: c++ pointers

我正在研究一个现有项目(由其他人编写),我无法理解这两个简单的功能。

我感兴趣的第一个功能包含:

int iCounts[NUM_GRADES];
PROFILEMAN->GetMachineProfile()->GetGrades( pSong, GAMESTATE->GetCurrentStyle()->m_StepsType, iCounts );

所以我可以看到iCounts被传递到GetGrades,这很好。但后来iCounts的用法如下:

AppendOctal( iCounts[g], 3, foo );

所以有些东西改变了iCounts。但是当我看看GetGrades时,它看起来像这样:

void Profile::GetGrades( const Song* pSong, StepsType st, int iCounts[NUM_GRADES] ) const{
    SongID songID;
    songID.FromSong( pSong );

    memset( iCounts, 0, sizeof(int)*NUM_GRADES );

    ...then some more stuff is done to iCounts

}

我无法理解的是,在GetGrades中没有涉及指针时,原始函数的iCounts如何被修改?

1 个答案:

答案 0 :(得分:8)

阵列衰减到指针;当你将一个函数传递给一个函数时,你没有传递整个数组的副本,而是传递一个指向数组的指针。