- •Структура программы на языке с
- •Int main(список параметров)
- •Библиотека и компоновка
- •Словарь терминов
- •Выражения
- •Переменные
- •Инициализация переменных
- •Константы
- •Строковые константы
- •Специальные символьные константы
- •Оператор присваивания
- •Множественные присваивания
- •Арифметические операции
- •Операции увеличения (инкремента) и уменьшения (декремента)
- •Сводка приоритетов операций
- •Выражения
- •Явное преоразование типов: операция приведения типов
- •Операция определения размера sizof
- •Операторы
- •Int a, b, c; // объявление переменных
- •Пробелы и круглые скобки
- •Логические значениия истина (True) и ложь (False) в языке с
- •Условные операторы Оператор if
- •If (выражение) оператор;
- •Int magic; /* магическое число */
- •Int guess; /* попытка игрока */
- •Int magic; /* магическое число */
- •Int guess; /* попытка игрока */
- •If(k) statement 2; /* этот if */
- •Int magic; /* магическое число */
- •Оператор выбора - switch
- •Вложенные операторы switch
- •Цикл for
- •Бесконечный цикл
- •Варианты цикла for
- •Бесконечный цикл
- •Цикл for без тела цикла
- •Цикл while
- •Случае цикл требует повторить ввод. Цикл do-while
- •Цикл do-while часто используется в функциях выбора пунктов меню. Если пользователь вводит допустимое значение, оно возвращается в качестве значения функции. В противном
- •Оператор перехода
- •Оператор return
- •Оператор goto
- •Оператор break
- •Функция exit()
- •Void exit (int код_возврата);
- •Оператор continue
- •Int n, sum; // sum - сумма цифр числа
- •Оператор-выражение
- •Далее адреса Операция получения адреса (&) и раскрытия ссылки (*)
- •Одномерные массивы
Далее адреса Операция получения адреса (&) и раскрытия ссылки (*)
Указатель — этоадрес объекта в памяти.
Переменная типа "указатель" (или просто переменная-указатель) — это специально объявленнаяпеременная, в которой хранится указатель на переменную определенного типа.
В языке С указатели служат мощнейшим средством создания программ и широко используются для самых разных целей. Например, с их помощью можно быстро обратиться к элементам массива или дать функции возможность модифицировать свои аргументы. Указатели широко используются для связи элементов в списках, в двоичных деревьях и в других динамических структурах данных.
Первый из них — оператор &, это унарный оператор, возвращающий адрес операнда в памяти. (Унарной операцией называется операция, имеющая только один операнд.)
Например, оператор
m = &count;
записывает в переменную mадрес переменнойcount. Этот адрес представляет собой адрес ячейки памяти компьютера, в которой размещена переменная.
Адрес и значение переменной — совершенно разные понятия.
Выражение "&переменная"означает "адрес переменной". Следовательно, инструкция
m = &scount;
означает: "Переменной mприсвоить адрес, по которому расположена переменнаяcount;".
Допустим, переменная countрасположена в памяти в ячейке с адресом 2000, а ее значение равно 100. Тогда в предыдущем примере переменнойmбудет присвоено значение 2000.
Второй рассматриваемый оператор *является двойственным (дополняющим) по отношению к&. Оператор * является унарным оператором,он возвращает значение объекта, расположенного по указанному адресу.Операндом для * служит адрес объекта (переменной). Например, если переменнаяmсодержит адрес переменнойcount, то оператор
q = *m;
записывает значение переменной countв переменнуюq. В нашем примере переменнаяqполучит значение 100, потому что по адресу 2000 записано число 100, причем этот адрес записан в переменнойm. Выражение "* адрес" означает "по адресу". Наш фрагмент программы можно прочесть как "qполучает значение, расположенное по адресуm".
К сожалению, символ операции раскрытия ссылки совпадает с символом операции умножения, а символ операции получения адреса — с символом операции поразрядного И. Необходимо помнить, что эти операторы не имеют никакого отношения друг к другу. Операторы * и & имеют более высокий приоритет, чем любая арифметическая операция, кроме унарного минуса, имеющего такой же приоритет.
Если переменная является указателем, то в объявлении перед ее именем нужно поставить символ *, он сообщит компилятору о том, что это указатель на переменную данного типа. Например, объявление указателя на переменную типа char записывается так:
char *ch;
Необходимо понимать, чтоch— это не переменная типаchar, а указатель на переменную данного типа, это совершенно разные вещи. Тип данных, на который указывает указатель (в данном случае этоchar), называетсябазовым типомуказателя[14]. Сам указатель является переменной, содержащей адрес объекта базового типа. Компилятор учтет размер указателя в архитектуре компьютера и выделит для него необходимое количество байтов, чтобы в указатель поместился адрес. Базовый тип указателя определяет тип объекта, хранящегося по этому адресу.
В одном операторе объявления можно одновременно объявить и указатель, и переменную, не являющуюся указателем. Например, оператор
int x, *y, count;
объявляет хиcountкак переменные целого типа, ау— как указатель на переменную целого типа.
В следующей программе операторы * и & используются для записи значения 10 в переменную target. Программа выведет значение 10 на экран.
#include <stdio.h>
int main(void)
{
int target, source;
int *m;
source = 10;
m = &source;
target = *m;
printf("%d", target);
return 0;
}