Почему-то при обращении к указателю массива для нахождение длины выводит 8(то.e 2 int элемента,а нужно 16(то бишь 4))

int Convert_mas_num(int *mas)
{   

    int del = 10;
    int num = mas[0];
    std::cout << sizeof(mas) << std::endl;
    for (int i = 1; i <= sizeof(mas)/sizeof(mas[0]); i++)
    {   
        num += mas[i]*del;
        del *= 10;
        std::cout << i << std::endl;
    }
    return num;
}


int main()
{   
    int mas[4] = {2, 4, 0, 1};
    int *p_mas = mas;
    std::cout << Convert_mas_num(p_mas);
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Пора делать какой-то стандартный вопрос и закрывать остальные, как дубли...

Что вы передаете в функцию?

int Convert_mas_num(int *mas)

указатель. Какой размер указателя? Обычно 4 байта для 32-разрядной платформы, 8 байт - для 64-разрядной.

Итак, ваше

sizeof(mas)/sizeof(mas[0])

равно на 64-разрядной платформе 8/4 == 2.

Вместе с указателем вам надо передавать в функцию и размер вашего массива.

→ Ссылка