Может ли имя переменной совпадать с именем функции в C ++? - PullRequest
0 голосов
/ 29 сентября 2019

В приведенном ниже коде lis - это массив, а также имя функции с тем же типом возврата (int), я не получил никакой ошибки. Кто-нибудь может объяснить, что происходит в фоновом режиме?Почему компилятор не показывает ошибку?

int lis( int arr[], int n )  
{  

int lis[n]; 
lis[0] = 1;    
for (int i = 1; i < n; i++ )  
{ 
    lis[i] = 1; 
    for (int j = 0; j < i; j++ )   
        if ( arr[i] > arr[j] && lis[i] < lis[j] + 1)  
            lis[i] = lis[j] + 1;  
} 

1 Ответ

0 голосов
/ 29 сентября 2019

Это не связано с именем переменной!Вы не можете определить список в функции, динамически.

Вы должны написать свой код следующим образом:

int lis(int arr[], int n)
{
    int *lis = new int[n];
    lis[0] = 1;
    for (int i = 1; i < n; i++)
    {
        lis[i] = 1;
        for (int j = 0; j < i; j++)
            if (arr[i] > arr[j] && lis[i] < lis[j] + 1)
                lis[i] = lis[j] + 1;
    }
    delete[] lis;

    return 0;
}
...