Один из моих друзей отправил мне этот код, сказав, что он работает не так, как ожидалось:
#include<stdio.h>
void main()
{
int a [10] ={23, 100, 20, 30, 25, 45, 40, 55, 43, 42};
int sizeOfInput = sizeof(a)/sizeof(int);
int b, outer, inner, c;
printf("Size is : %d \n", sizeOfInput);
printf("Values before bubble sort are : \n");
for ( b = 0; b < sizeOfInput; b++)
printf("%d\n", a[b]);
printf("End of values before bubble sort... \n");
for ( outer = sizeOfInput; outer > 0; outer-- )
{
for ( inner = 0 ; inner < outer ; inner++)
{
printf ( "Comparing positions: %d and %d\n",inner,inner+1);
if ( a[inner] > a[inner + 1] )
{
int tmp = a[inner];
a[inner] = a [inner+1];
a[inner+1] = tmp;
}
}
printf ( "Bubble sort total array size after inner loop is %d :\n",sizeOfInput);
printf ( "Bubble sort sizeOfInput after inner loop is %d :\n",sizeOfInput);
}
printf ( "Bubble sort total array size at the end is %d :\n",sizeOfInput);
for ( c = 0 ; c < sizeOfInput; c++)
printf("Element: %d\n", a[c]);
}
Я использую MicOSoft Visual Studio Command Line Tool для компиляции на компьютере под управлением Windows XP.
cl /EHsc bubblesort01.c
Мой друг получает правильный вывод на машине динозавра (код скомпилирован с использованием TCC там).
Мой выход неожиданен. Массив таинственно растет в размерах, между ними.
Если вы измените код так, чтобы переменная sizeOfInput
была изменена на sizeOfInputt
, она дает ожидаемые результаты!
Поиск по Центр разработки Microsoft Visual С++ не дает никаких результатов для "sizeOfInput".
Я не эксперт по C/С++, и мне интересно узнать, почему это происходит - любые эксперты C/С++, которые могут "пролить свет" на это?
Несвязанное примечание: я серьезно подумал о переписывании всего кода, чтобы использовать сортировку quicksort или merge, прежде чем публиковать ее здесь. Но, в конце концов, это не Stooge sort...
Изменить: я знаю, что код неверен (он читается за последним элементом), но мне любопытно, почему имя переменной имеет значение.