Найти в Дзене
Leonid Karnauh

Указатели. Адреса. Ссылки

Введем очередной уровень. Переменная, которая хранит адрес другой переменной. Указатель всегда имеет тип хранимой переменной. //сперва заведем переменную 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++; } }

Введем очередной уровень. Переменная, которая хранит адрес другой переменной. Указатель всегда имеет тип хранимой переменной.

//сперва заведем переменную

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++;

}

}