Я пишу C++ функции для вычисления размера массива C-типа в C++Странное поведение размер массива C++
я заметил, очень странное поведение при использовании этих двух различных кодов:
код 1:
int sz = sizeof array/sizeof *array;
код 2:
int array_size(const int *pointer)
{ int count=0;
if(pointer)
while(*pointer) {
count++;
pointer++;
}
return count;
}
Когда я применил эти два метода в массиве, он дал мне очень странное поведение:
пример 1:
int array[10] = {31,24,65,32,14,5};// defined to be size 10 but init with size 6
код один даст мне размер = 10, а код 2 будет дают мне размер 6, и когда я распечатать элемент, на который указывает указатель *, это даст мне правильный элементы массива:
31 24 65 32 14 5
пример 2
int array[] = {31,24,65,32,14,5}; // no declared size but init with 6
Код 1 даст мне размер 6, код 2 даст мне размер 12, и когда я распечатать элемент, на который указывает * указатель в коде 2, это дает мне:
31 24 65 32 14 5 -802013403 -150942493 1461458784 32767 -1918962231 32767
, что действительно не так, так что может быть проблемой, вызывающей такое поведение? и каковы эти цифры?
Спасибо за ваш ответ
@juanchopanza неудачный упор :-P ... –
И почему вы полагаете, что второй метод когда-либо будет работать? – m0nhawk
«Массив типа C» для меня не имеет большого значения.Это как сказать «C-стиль' if' ». – szczurcio