Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Ну заодно и ты не путай ребенка :-) 07.06.05 18:09 Число просмотров: 1719
Автор: amirul <Serge> Статус: The Elderman
|
> В С возможно любое приведение, иногда это порождает ТАКИЕ > приведения, что проще переписать, чем на них охотиться :) > Но это лирика, а физика в том, что > int i; > char* S1; > char* S2; > i = S2 - S1; > Абсолютно валидно, без всяческих доп. усилий. > Ведь [любой тип]* - занимает 4 байта, что полностью мапится > на переменую типа int. Твой пример работает только с (char *), а отсылка к [любому типу] некорректна, потому как арифметика указателей явно говорит, что в результате вычитания указателей получается не смещение в байтах, а количество элементов данного типа между этими указателями.
#include <stdio.h>
void
main() {
char *pc1 = (char *)123456, *pc2 = pc1 + 5;
int numchars = pc2 - pc1;
int *pi1 = (int *)123456, *pi2 = pi1 + 5;
int numints = pi2 - pi1;
printf("%d\n%d\n", numchars, numints);
}
---
Выдает
5
5
---
Хотя sizeof(int) == 4 на моей машине.
|
|
|