Указатели. Вычитание указателей - C#

Узнай цену своей работы

Формулировка задачи:

Сам читаю книгу Шилдта. Глава с указателями, написано - "Если складывать указатели нельзя, то разрешается вычитать один указатель из другого, при условии, что оба указателя имеют один и тот же соотносимый тип. Результатом такой операции окажется количество элементов соотносимого типа, которые разделяют оба указателя". Конкретного примера в книге нету, на MSDN вычитал, что результатом такого вычитания всегда тип long.
   
int one = 4;
int two = 10;
 
int* p1 = &one;
int* p2 = &two;
long* dif;
 
dif = (long*)(p2 - p1); 
Console.WriteLine((long)dif);
Console.WriteLine();
В результате у меня получается 4294967295, а я ожидаю 6. Ткните носом, что я делаю не так. Спасибо.

Решение задачи: «Указатели. Вычитание указателей»

textual
Листинг программы
//объявляем переменную присваиваем ЗНАЧЕНИЕ = 10
//адрес равен 0 + смещение
//(там будет определенное значение, которое возможно будет разным, назавем это значение смещением)
int one = 10;
//объявляем переменную присваиваем ЗНАЧЕНИЕ = 20
//адрес ее будет равен 4 + смещение (размер int = 4байта)
int two = 20;
//объявляем переменную присваиваем ЗНАЧЕНИЕ = 30
//адрес будет 8 + смещение.
int three = 30;
 
int* ptrOne = &one; //ptrOne будет равен адресу, то есть 0 + смещение
int* ptrThree = &three;//ptrTwo будет равен адресу, то есть 8 + смещение
 
//при вычитании наше смещение сократится, и останется 8
//т.к. размер переменной равен 4, то ответ будет 2 (8 / 4 = 2)
long delta = ptrThree - ptrOne;
Console.WriteLine(delta);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы