← All posts tagged странности

Вот интересно сегодня получилось. Помогал другу писать программу на Си. В функцию нужно передать адрес начала массва(им является само имя массива), чтобы потом, изменяя этот адрес, двигаться по массиву с помощью опрераторов ++ —
Пишу значится с дурной головы void Sort(int **array); и вызываю int main() { int a[SIZE]; ... Sort(a); ... }
Код мой сходу не заработал, через минуту было опробованно вызвать функцию как Sort(&a); и, что меня удивило, оно работает ТОЧНО ТАКЖЕ как и предыдущий вызов. Подумал, зачем же делать указатель на указатель, когда можно сдеалть проще — Sort(int *array); и был прав. Но всеже вопрос почему предыдущий пример работал с & и без & мучает. Методом printf("%d %d\n", a, &a); выяснилось, что эти адреса РАВНЫ. Тоесть адрес, содержащийся в указателе, равен его местоположению в памяти. Непонятен для меня остался следующий момент — почему при printf("%d", *a); послушно выводится значение 0го эллемента массива??? Ведь по логике обычной работы с указателями должен был показаться адрес местоположения указателя(т.к подчеркну, что они равны) ...