2
나는 (다른 누군가가 작성한) 기존 프로젝트에서 작업하고 있는데,이 두 가지 간단한 함수를 사용하여 머리를 쓸 수 없습니다. 나는에 관심이이 C++ 코드는 어떻게 작동합니까?
첫 번째 기능이 포함되어 있습니다
int iCounts[NUM_GRADES];
PROFILEMAN->GetMachineProfile()->GetGrades(pSong, GAMESTATE->GetCurrentStyle()->m_StepsType, iCounts);
그래서 나는 iCounts이 잘되는, GetGrades에 전달되는 것을 볼 수 있습니다. 하지만 나중에 iCounts는 다음과 같이 사용됩니다.
AppendOctal(iCounts[g], 3, foo);
그래서 iCount가 변경되었습니다. 내가 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은 내가 이해할 수없는 무엇을 수정됩니까입니까?
더 이상 포인터 (실제로 첫 번째 요소)를 전달하지 않는 것입니까? '그 배열 자체를 전달하는 것'은 혼란스럽고/나에게 잘못 해석 될 가능성이 있습니다. – ted
int를 전달할 때 int * []를 의미하기 때문에이 공식을 좋아하지 않습니다. []. 나는 그것들이 포인터 의미론 (value semantics와 반대로)을 가지고 있다고 명시하는 것을 선호한다. – Borgleader
확실히 나를 위해 그것을 설명한다. 이 행동의 근거는 무엇입니까? –