Это в основном функция atoi
-типа (или atol
-типа) для создания целочисленного значения из строки. Рассмотрим строку "123"
.
Перед запуском key_num
устанавливается на ноль.
- На первой итерации это умножается на 10, чтобы дать вам 0, затем к нему добавляется значение символа
'1'
и вычитается '0'
, эффективно добавляя 1, чтобы получить 1.
- На второй итерации это умножается на 10, чтобы дать вам 10, затем к нему добавляется значение символа
'2'
и вычитается '0'
, эффективно добавляя 2, чтобы получить 12.
- На третьей итерации это умножается на 10, чтобы дать вам 120, затем к нему добавляется значение символа
'3'
и вычитается '0'
, эффективно добавляя 3, чтобы получить 123.
Вуаля! Вот оно, 123.
Если вы измените код так:
#include <iostream>
char buf[] = "012345678901234567";
void someFunction(long long *key_num) {
std::cout << *key_num << std::endl;
for (int i = 0; i < 18; i++) {
*key_num = *key_num * 10 + (buf[i] - '0');
std::cout << *key_num << std::endl;
}
}
int main (void) {
long long x = 0;
someFunction (&x);
return 0;
}
тогда вы должны увидеть это в действии (мне пришлось изменить ваше значение с 17-символьного массива, который вы указали в комментарии, на 18-символьный , иначе вы ' у меня возникли некоторые проблемы, когда вы пытались использовать персонажа за пределами; мне также пришлось сменить его на long long
, потому что мои длинные не были достаточно большими):
0
0
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
12345678901
123456789012
1234567890123
12345678901234
123456789012345
1234567890123456
12345678901234567