Я новичок в C++, и у меня проблема с пониманием некоторого кода.C++ static_cast от int * до void * to char * - можете ли вы помочь мне понять этот код?
У меня было упражнение, чтобы написать функцию, которая возвращает размер int
, и не использовать sizeof()
и reinterpret_cast
. Кто-то дал мне решение, но я не понимаю, как это работает. Не могли бы вы помочь мне понять это? Это код:
int intSize() {
int intArray[10];
int * intPtr1;
int * intPtr2;
intPtr1 = &intArray[1];
intPtr2 = &intArray[2];
//Why cast int pointer to void pointer?
void* voidPtr1 = static_cast<void*>(intPtr1);
//why cast void pointer to char pointer?
char* charPtr1 = static_cast<char*>(voidPtr1);
void* voidPtr2 = static_cast<void*>(intPtr2);
char* charPtr2 = static_cast<char*>(voidPtr2);
//when I try to print 'charPtr1' there is nothing printed
//when try to print charPtr2 - charPtr1, there is correct value shown - 4, why?
return charPtr2 - charPtr1;
}
Чтобы подвести итог, что я не понимаю, почему мы должны изменить int*
к void*
и затем char*
, чтобы выполнить эту задачу? И почему мы получаем результат, когда мы вычитаем charPtr2
и charPtr1
, но при попытке распечатать только charPtr1
ничего не отображается?
См http://stackoverflow.com/questions/3238482/pointer-subtraction-confusion –
'char' - это размер' 1', поэтому приведение в 'char *' - это так, что вы можете подсчитать, сколько «символов» вписывается в один «int». – juanchopanza
@PeterT Стандарт требует, чтобы 'char' был одним байтом. (Конечно, реализация получает возможность выбирать, сколько бит в байте.) –