Дополнительно
Добавить в закладкиHexElf
Главный модератор
Указатель — это переменная, которая хранит адрес другой переменной в памяти. Указатель объявляется следующим образом:
Указатели очень важны при работе с языком Си в дальнейшем изучении, и попросту это более эффективно в разработке.
Пример работы указателя:
#include <stdio.h>
int main(void){
int x = 10;
int *p = &x;
printf("%d\n",*p);
return 0;
}
Здесь мы объявили переменную
Интересные функции указателей.
1. Экономия памяти и времени. По сути мы передаём адреса вместо копий данных.
Без указателя: 0.003231 секунд
С указателем: 0.002782 секунд
Тест проводился на 1 000 000 элементов при передаче массива.
2. Изменять данные уже существующей переменной.
Пример:
#include <stdio.h>
int main(void){
int x = 10;
int *p = &x;
printf("%d\n",*p);
*p = 20;
printf("%d\n",*p);
return 0;
}
Результат:
10
20
3. Указатель на указатель. Используется, когда требуется работа с многомерными данными или изменение указателей внутри функции.
#include <stdio.h>
void chang_p(int **p_p, int *new_value){
*p_p = new_value;
}
int main(void){
int x = 10, y = 20;
int *p = &x;
int **p_p = &p;
printf("%d\n",*p);
chang_p(p_p, &y);
printf("%d\n",*p);
return 0;
}
Указатели это очень простая концепция, очень заваражующая, но требует очень много внимания, ибо дальнейшее изучение Си будет трудноватым. Вторая часть будет опубликована в зависимости от интереса к первой части. Во второй части я расскажу про нулевой указатель, массив и указатель, указатель и приведение типов, const указатель, универсальный указатель, а также о том, как правильно работать с ними, чтобы избежать утечек памяти или "висячих" указателей
(тип) *имя;
Указатели очень важны при работе с языком Си в дальнейшем изучении, и попросту это более эффективно в разработке.
Пример работы указателя:
#include <stdio.h>
int main(void){
int x = 10;
int *p = &x;
printf("%d\n",*p);
return 0;
}
Здесь мы объявили переменную
x
со значением 10, после чего указатель *p
ссылается на адрес x
с помощью оператора & (амперсанд), который получает адрес. Оператор * используется для разыменования указателя, чтобы получить значение по этому адресу.Интересные функции указателей.
1. Экономия памяти и времени. По сути мы передаём адреса вместо копий данных.
Без указателя: 0.003231 секунд
С указателем: 0.002782 секунд
Тест проводился на 1 000 000 элементов при передаче массива.
2. Изменять данные уже существующей переменной.
Пример:
#include <stdio.h>
int main(void){
int x = 10;
int *p = &x;
printf("%d\n",*p);
*p = 20;
printf("%d\n",*p);
return 0;
}
Результат:
10
20
3. Указатель на указатель. Используется, когда требуется работа с многомерными данными или изменение указателей внутри функции.
#include <stdio.h>
void chang_p(int **p_p, int *new_value){
*p_p = new_value;
}
int main(void){
int x = 10, y = 20;
int *p = &x;
int **p_p = &p;
printf("%d\n",*p);
chang_p(p_p, &y);
printf("%d\n",*p);
return 0;
}
Указатели это очень простая концепция, очень заваражующая, но требует очень много внимания, ибо дальнейшее изучение Си будет трудноватым. Вторая часть будет опубликована в зависимости от интереса к первой части. Во второй части я расскажу про нулевой указатель, массив и указатель, указатель и приведение типов, const указатель, универсальный указатель, а также о том, как правильно работать с ними, чтобы избежать утечек памяти или "висячих" указателей

Отредактировано автором: