Рассмотрим этот фрагмент кода, пытаясь проверить, равны ли два массива:
int arr1[5] = {1,2,3,4,5};
int arr2[5] = {1,2,3,4,5};
int *p1 = arr1;
int *p2 = arr2;
if (end(arr1) - p1 == end(arr2) - p2) // Check if sizes are equal
{
for (size_t i = 0;
p1 != end(arr1);
++i){
if (*(p1 + i) != *(p2 + i)){ // Check if each ith element is equal
cout << "Arrays not equal!" << endl;
return 0;
}
}
cout << "Arrays equal!" << endl;
return 0;
}
else // Not equal if sizes don't match
{
cout << "Arrays not equal!" << endl;
return 0;
}
Когда я запускаю этот код, я получаю "Arrays not equal!"
. Итак, я искал условие if
, когда заметил, что *(p1 + i)
для первого i
, то есть i = 0
, похоже, дает значение 32766
, тогда как если я пишу *(p1 + 0)
, Я получаю первый элемент arr1
, как и ожидалось. Почему это происходит?