При изменениях в одном массиве, они происходят и в другом - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, проблемы в общем то нет, но хотелось бы узнать, почему так происходит. В общем под Си ни когда не писал, а вот решил вдруг и по быстрому ) А происходит вот, что: есть два массива по величиной по 10 элементов каждый. когда присваиваю в один значение, во втором значение с тем же индексом меняется на какое-то значение ??? Вот функция, где это происходит:
int maxihous(int *abon, int *build, int id, int abon_sum)
{
  int abon_temp, id_temp, i, j;
  for(i=0; i<10; i++) //1
  {
    if(abon_sum>=*(abon+i))
    {
      for(j=8; j>=i; --j)   //9
      {
    abon_temp=*(abon+j);  //9
    id_temp=*(build+j);   
    *(abon+j+1)=abon_temp;   //9
    printf("?????????????abon====%d; *build=%d; j=%d; i=%d \n", *abon, *build, j, i);
/// Здесь *abon, он же max_abon[0], нормально выглядит  
    *(build+j+1)=id_temp;
/// А после этой строчки в *abon почемуто заноситься какоето значение????????????
    printf("!!!!!!!!!!!abon====%d; *build=%d; j=%d; i=%d \n", *abon, *build, j, i);
      }
      *(abon+i)=abon_sum; //1
      *(build+i)=id;
  //    printf("№%d: max_abon=%d; id=%d \n", i, *(abon+i), *(build+i));
      break;
    }
  }
 
}
А вызывается она так:
maxihous(&max_abon[0], &id_build[0], longval, tmp_abon);
из функции main. В общемто ни чего вроде неприличного, передаю в функцию указатели на два массива, на первый их аргумент, а дальше заполняю эти массивы числами. Ну ни то, что бы я не смог по другому обойти этот эффект, или уж на PHP переписать, просто хочу понять почему так? почему два разных массива где то пересекаются в памяти, и как им это разрешила ось, или я чего не до понял. пытался код упростить и повторить такой глюк, но ни чего не получилось. компилятор gcc версия 4.3.3 ось arch linux, ядро 2.6.28.7 , если это важно

Решение задачи: «При изменениях в одном массиве, они происходят и в другом»

textual
Листинг программы
*(build+j+1)=id_temp;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы