Введем очередной уровень. Переменная, которая хранит адрес другой переменной. Указатель всегда имеет тип хранимой переменной. //сперва заведем переменную int a = 45; //сохранить адрес переменной в указатель int * b= &a; & это попытка взять адрес объекта. //меняем значение по адресу. //здесь a = 400, (*b) = 400 -- то есть меняется одна область памяти. *b = 400; Связь между одномерным массивом и указателем на int. Одномерный массив это ссылка на область памяти. Покажем, как сделать еще одну ссылку на тот же массив. int a[]= {43,67,78};//создать массив из 3-х эл-тов int * p = a; for(int i = 0; i < 3; i++) { p++;//сдвинем по массиву на ячейку *p = i*i; } Как это происходит с двумерным массивом. int a[rows][cols]; for(i = 0; i < rows; i ++) { int ** p = a[i][0]; for(j = 0; j < cols; j ++) { p[ i][j] = i*rows + j; p++; } }