2015-02-24 5 views
1
int bar(const size_t value) { 
    char *d = (char*) value; 
    *d = 'B'; 
} 

int main() { 
    char bar = 'A'; 
    bar((size_t)&d); 
} 
  1. Пользуется size_t эмулировать тип указателя недействительного юридический? Зачем?Использование size_t для эмуляции пустого указателя

  2. Какие преимущества/недостатки у него есть?

+0

Что вы подразумеваете под юридическим? – reader

+0

@reader 'size_t' интерпретируется как' data * ', no? Функция принимает параметр по значению. – juanchopanza

+0

@gio: Вы связали *** этот вопрос ***. – alk

ответ

3

Для данные указателей, туда и обратно с указателем на целое число типов обратно к типу указателя оригинал хорошо определен до тех пор, как целочисленный тип достаточно широка, чтобы держать указатель без потерь.

size_t был определен, чтобы хранить размер объекта. Они обычно достаточно велики, чтобы содержать представление указателя, но это не гарантировано, и они были реализацией, где предположение не выполнялось.

uintptr_t и intptr_t являются целыми типами, которые определены достаточно широко, чтобы удерживать указатель без потерь.

Для функция указатели, я не знаю никакой гарантии.