2016-07-16 2 views
0

Вот некоторые примеры кода я играю с:Что означает * test ++ = count + '0'; делать?

#include <iostream> 

int main() { 

    char string[] = "hello"; 
    char *test = string; 

    int count = 0; 
    *test++ = count + '0'; 
    count++; 
    *test++ = count + '0'; 

    std:: cout << test << std:: endl; 

} 

Выход является LLO.

Я знаю, что это, вероятно, очень просто, но я смущен этой строкой кода: *test++ = count + '0';. Если count = 0, что добавляет '0' do (добавив ноль)? А при оценке *test++ позиция теста сначала увеличивается, а затем разыменовывается? Что именно он назначается?

ответ

2

char хранит числовые кодировки символов, поэтому count + '0' - это просто сумма двух чисел. В практическом отношении цифры 0, ..., 9 имеют тенденцию иметь последовательные кодировки, поэтому быстрый взлом для преобразования цифры в символ (кодирование) соответствует digit + '0'.

*p++ анализируется как *(p++) и является общим идиома «получить вещь, что указывает на p, а затем продвигать p». Итак *p++ = x магазины x в том месте, которое p изначально указывает на, а затем p указывает на следующее место.

(напомним, что значение z++ это значение сохраняется в zперед тем он получает приращение, а не значение оно после приращения)

2

Посмотрите на таблицу символов ASCII. Символы от 0 'до' 9 'являются последовательными. Добавляя '0' к count, преобразует count, который может быть числом от 0 до 9, с символом от 0 до 9.

Что касается *test++, то это наоборот, test сначала разыменовывается, а затем увеличивается.

Подводя итог, count, число от 0 до 9, от символа «0» до «9», присваивает его *test, затем увеличивается test.

Смежные вопросы