Этот подход является плохой идеей по нескольким причинам, но сначала вот некоторые проблемы:
int temp[0];
Это массив из 0 элементов, который я даже не считаю допустимым для элементов стека. При объявлении такого массива вы должны указать максимальное количество значений, которое вы когда-либо будете использовать: Например. int temp[10];
Это очень важно! - если вы укажете меньшее число (например, [10] и используете [11]), то вы вызовете перезапись памяти, которая в лучшем случае вылетает, а в худшем случае вызывает странное ошибки, которые являются кошмаром, чтобы выследить.
Следующая проблема - эта строка:
while (*temp + i != '\0')
То, что делает эта строка, берет значения, хранящиеся в адресе, указанном в 'temp', и добавляет i. Вам нужно получить значение в n-м элементе адреса, заданного параметром temp, например:
while (*(temp + i) != '\0')
Так вот, что не так, но вам нужно потратить пять минут, чтобы подумать о лучшем способе сделать это.
Причины, которые я упомянул, это плохая идея:
- Вам нужно перебирать весь массив в любое время, когда вам требуется его длина
- Никогда нельзя хранить завершающий элемент (в данном случае 0) в массиве
Вместо этого я бы предложил вам сохранить отдельное значение, которое хранит количество элементов в массиве. Очень распространенный способ сделать это - создать класс, который охватывает эту концепцию (блок элементов и текущий размер).
Стандартная библиотека C ++ поставляется с классом шаблона с именем "vector", который можно использовать для этой цели. Это не совсем то же самое, что массив (вы должны добавить элементы перед индексацией), но он очень похож. Он также предоставляет поддержку для копирования / изменения размера, что также удобно.
Вот ваша программа, написанная для использования std :: vector. Вместо функции length я добавил что-то для вывода значений:
#include <vector>
#include <iostream>
void print(std::vector<int> const& vec)
{
using namespace std;
for (size_t i = 0; i < vec.size(); i++)
{
cout << vec[i] << " ";
}
cout << endl;
}
int main()
{
std::vector<int> temp;
temp.push_back(7);
temp.push_back(10);
print(temp);
return 0;
}