Изучение Си (урок 4)

X

Xamil

Original poster
Указатели
Указатели одна из важных тем в программировании, поэтому нужно хорошо понять , как работают указатели и как из испльзовать.
Для начала вспомним, что память компьютера состоит из миллионов ячеек, и каждой ячейке присовен адрес.
ПРостой пример. Создавая переменную rate компилятор выделит для нее ячейку памяти с адресом 1000.Если мы создали ее с типом int то след ячейка будет на 4 байта младше .т.е .1004.
Создание указателей
Заметим, что адрес переменной rate - это просто число и с ним можно обращаться как с обычным числовым значением.Зная адрес переменной , можно завести вторую переменную и поместить в нее адрес первой . Первый шаг в этой функции - это объявить переменную для хранения адреса переменной rate назовем ее p_rate
Но никакое значение туда не помещается .
Чтобы поместить туда адрес нужно объявить указатель.
C:
int *p_rate;
int rate = 100;
p_rate = &rate;
теперь посмотрим что будет выводиться на экран

C:
printf("%d\n", rate);    //100
printf("%d\n", &rate);    //10004
printf("%d\n", &p_rate);//10000
printf("%d\n", p_rate); //10004
printf("%d\n", *p_rate); //100

Указатели и Массивы
Имя массива как указатель. Имя массива без квадратных скобок является указателем на первый элемент массива.Например ,если объявлен массив data[], то data - это адрес первого элемента данного тобой массива.
В языке С справедливо соотношение (data == &data[0]) поэтому для получения адреса не нужно ставить амерсанд перед именем.
Размещение элементов массива в памяти
простой пример с типом short
есть переменная short array[6], в памяти они будут расположены
|100--101|--|102--103|--|104--105|--|106--107|--|108--109|--|110--111|
x[0]------------x[1]------------x[2]------------x[3]------------x[4]------------x[5]

тоже самое произоедет с типом float,но там уже значение x[0] имела бы диапазон 4 ячейки. от 100 до 103

Инкрементирование указателей
Инкрементировать указатель, ознаачант увеличивать его значение.Если значение указателя инкрементируется на 1 , адресная арифметика автоматически увеличивает хранимый адрес так, чтобы он указывал на следующий элемент массива.Другими словами , компилятор знает тип указателя и увеличивает хранимый в нем адрес на длинуу элемента данных.
Предположим ptr_sh является указателем на какой-то элемент массива тип short. И выполнится оператор ptr_sh++;
в резцльтате значение ptr_sh увеличится на длину типа short - 2 байта - и указатель теперь будет указывать на след элемент массива. если будет выполнен оператор
ptr_sh +=4; то указатель будет указывать на элемент, находящийся на 4 позиции дальше:
декрементирование указателей
тоже самое что и инкрементироване, но только в обратную сторону
Другие операзии с указателями
Еще одна полезная операция - это вычисление смещения.Вычитание двух указателей.Если есть два указателя на разные элементы одного массива, то их можно вычесть друг из друга и выяснить на каком расстоянии они находятся друг от друга.
ptr1-ptr2
Указатели также можно сравнивать.Сравнение имеет смысл только для указателей на один и тот же массив. При соблюдении этих условий операции сравнеиня выполняются корректно.Младшие элементы массива всегда имеют именьшие адреса , чем старшие элементы.Таким образом , если ptr1 и ptr2 указывае=ют на элемент одного массива , то следующее соотношение истинно тогда, когда ptr1 указывает на элемент с меньшим индексом , чем ptr2
ptr1 < ptr2
 
  • Like
Реакции: Ltybcrf
Название темы
Автор Заголовок Раздел Ответы Дата
X Изучение Си (урок 6) С/C++ 1
X Изучение Си (урок 5) С/C++ 0
X Изучение Си (урок 3) С/C++ 0
X Изучение Си (урок 2( С/C++ 0
X Изучение Си (урок 1) С/C++ 1
wrangler65 Изучение загрузчиков вредоносного ПО LNK: случайный анализ Вирусология 0
Z Подскажите, как и с чего начать изучение кибер безопасности? Вопросы и интересы 10
E Интересно С чего начать изучение информационной безопасности в 2020 году Полезные статьи 0
A Книга для изучение c# .NET 3
N С чего начать изучение DDOS ? Вопросы и интересы 9
N Изучение C++(видео уроки) С/C++ 1
R Изучение JavaScript с нуля Другие ЯП 4
S Изучение html, css!!! Другие ЯП 2
El_IRBIS Интересно Требуется СИ специалист. Предоставляю работу. Ищу специалиста. 0
Support81 План Си Цзиньпина: как превратить хакеров в государственный актив Новости в сети 0
C Фича для СИ) СИ/Фишинг/Мошенничество 1
H Алгоритм вируса "Стелс" на Си(С). 2020 Вирусология 0
ev0117434 Интересно Пак голосовых девушки для СИ СИ/Фишинг/Мошенничество 10
V [СИ] - Эффект Бранума СИ/Фишинг/Мошенничество 0
T Качественно впариваем любую малварь с помощью СИ Полезные статьи 1
V Качественно впариваем любую малварь с помощью СИ СИ/Фишинг/Мошенничество 1
T Схема на СИ от 20.000 в неделю Полезные статьи 1
H СИ при шантаже [КАК?] Вопросы и интересы 11
J Обучение СИ часть 2 | Безопастность Полезные статьи 2
J Обучение СИ от сеоблога | Часть 1 Полезные статьи 0
G Добыча селфи с паспортом при помощи СИ Полезные статьи 0
Z Метод добычи токена вк с помощью СИ! СИ/Фишинг/Мошенничество 2
M Книги по СИ Полезные статьи 7
Ф Книга по СИ(социальная инженерия) Полезные статьи 19
Admin Схема торговли с помощью СИ СИ/Фишинг/Мошенничество 0
G 26 книг,чтобы поднять уровень СИ! Полезные статьи 12
NickelBlack Заработок с партнерки пользуясь СИ. Спам, рассылки, трафик, SEO 0
Admin СИ, НЛП, Впаривание малвари, как заразить вирусом Полезные статьи 0
Support81 Урок не выучен: Onyx теряет $3,8 млн из-за старой уязвимости Новости в сети 0
Ж HTML/CSS, Урок 2 Другие ЯП 3
Ж Садись присаживайся, курс по HTML/CSS, урок 1 Другие ЯП 1
K Уроки по XSS: Урок 3. Контексты внедрения XSS Уязвимости и взлом 0
K Уроки по XSS: Урок 2. Скрытая передача данных, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода ф Уязвимости и взлом 0
K Уроки по XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов Уязвимости и взлом 0
A Delphi. Урок 17. Типы С/C++ 0
A Delphi. Урок 16. Исключительные ситуации С/C++ 0
A Delphi. Урок 15. Математические операции С/C++ 0
A Delphi. Урок 14. Работа со списками строк TStringList или «сложные» типы С/C++ 0
A Delphi. Урок 13. Работа со строками С/C++ 0
A Delphi. Урок 12. Преобразование числа в строку и строки в число С/C++ 0
A Delphi для начинающих. Урок 11. Процедуры и функции С/C++ 0
A Delphi для начинающих. Урок 10. Циклы. Работа с массивами С/C++ 0
A Delphi для начинающих – Урок 9 – Массивы С/C++ 0
A Delphi для начинающих – Урок 8 – Условия. Оператор Case С/C++ 0
A Delphi для начинающих – Урок 7 – Условия. Оператор IF С/C++ 0

Название темы