Указатель как аргумент функции - PullRequest
0 голосов
/ 16 февраля 2012

Я написал похожий код некоторое время назад, и он работал, но по какой-то причине это не так, и я не могу понять, что я пропустил или сделал неправильно.

int fn(int *pArg)
{
    if(*pArg!=NULL)
        return *pArg+fn(pArg+1);
    else
        return 0;
}

int main()
{
    int nArray[128],i,nLenght;
    std::cin>>nLenght;
    for(i=1;i<=nLenght;i++)
        std::cin>>nArray[i];
    std::cout<<"The sum of the array is: "<<fn(nArray);
    system("PAUSE");
    return 0;
}

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Эта программа имеет недостатки во многих отношениях, одним из которых является то, что

*pArg!=NULL

сравнивает int с константой нулевого указателя. Сделайте pArg != NULL вместо.

(И обратите внимание, что fn имеет недостатки; он будет пытаться выполнить рекурсию до тех пор, пока указатель не приблизится к NULL, но, вероятно, из-за переполнения стека задолго до того, как это произойдет.)

0 голосов
/ 16 февраля 2012
std::cin>>a[i];

Эта строка должна быть:

std::cin>>nArray[i];
...