При изменениях в одном массиве, они происходят и в другом - C (СИ)
Формулировка задачи:
Всем привет, проблемы в общем то нет, но хотелось бы узнать, почему так происходит.
В общем под Си ни когда не писал, а вот решил вдруг и по быстрому )
А происходит вот, что:
есть два массива по величиной по 10 элементов каждый. когда присваиваю в один значение, во втором значение с тем же индексом меняется на какое-то значение ???
Вот функция, где это происходит:
А вызывается она так:
из функции main. В общемто ни чего вроде неприличного, передаю в функцию указатели на два массива, на первый их аргумент, а дальше заполняю эти массивы числами.
Ну ни то, что бы я не смог по другому обойти этот эффект, или уж на PHP переписать, просто хочу понять почему так? почему два разных массива где то пересекаются в памяти, и как им это разрешила ось, или я чего не до понял. пытался код упростить и повторить такой глюк, но ни чего не получилось.
компилятор gcc версия 4.3.3
ось arch linux, ядро 2.6.28.7 , если это важно
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);
Решение задачи: «При изменениях в одном массиве, они происходят и в другом»
textual
Листинг программы
*(build+j+1)=id_temp;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д