
Помогите, пожалуйста, вопросы по языку Си Совместимость типов указателей. Каков результат
операции вычитания, примененной к указателям одного типа? Когда и зачем может повторно использоваться операция разыменования? в интернете не нашлось

Ответы на вопрос

Например:
// зададим фиксированные адреса:
int p1 = (int *)0x1000;
int p2 = (int *)0x1004;
int e = p2 - p1;
Здесь 'e' = 1, т.е. равно числу переменных типа 'int', поместившихся бы между адресом 0x1000 и 0x1004.
2) Когда имеет место косвенная адресация, т.е. один указатель ссылается на другой, а тот - на переменную. Тогда, чтобы изменить значение переменной через 1-ый указатель мы используем разыменование 2 раза:
int a;
int *p1 = &a;
int **p2 = &p1;
**p2 = 10; // => a = 10



Конечно, я помогу вам разобраться с вопросами по языку Си.
Совместимость типов указателей:
В языке C существует понятие совместимости типов указателей. Указатели могут быть совместимыми, если они указывают на объекты одного и того же типа или на объекты, которые можно привести друг к другу с помощью явного приведения типа.
Результат операции вычитания, примененной к указателям одного типа:
Результат операции вычитания между двумя указателями одного и того же типа будет представлять разницу между адресами, на которые указывают эти указатели. Это выражается в количестве элементов данного типа, которые могут поместиться между этими адресами. Например, если у вас есть указатели
ptr1
иptr2
на элементы типаint
, то результатptr2 - ptr1
будет равен количеству элементов типаint
между адресами, на которые указывают эти указатели.Операция разыменования:
Операция разыменования (
*
) в языке C используется для доступа к значению, на которое указывает указатель. Это позволяет получить доступ к данным, на которые указывает указатель. Операция разыменования может повторно использоваться, когда указатель указывает на указатель (указатель на указатель). Например:cint x = 42; int *ptr1 = &x; // Указатель на int int **ptr2 = &ptr1; // Указатель на указатель на int int value = **ptr2; // Разыменование указателя на указатель дважды
В этом примере
**ptr2
разыменовывает указательptr2
, чтобы получить указательptr1
, а затем второй раз разыменовываетptr1
, чтобы получить значение42
, на которое указываетptr1
.
Не стесняйтесь задавать дополнительные вопросы, если у вас возникнут дополнительные трудности или неясности.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili