以下是我正在玩的一些示例代码:
#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'
会做什么(添加零)?在评估*test++
时,测试的位置首先递增,然后解除引用?究竟是什么分配的?
答案 0 :(得分:2)
查看ASCII字符表。字符'0'到'9'是连续的。将{0}添加到count
会将count
(可能是0到9)转换为字符“0”到“9”。
就*test++
而言,反过来说,test
首先被解除引用,然后它会增加。
总结一下,count
,0到9之间的数字,字符'0'到'9',将其分配给*test
,然后递增test
。
答案 1 :(得分:2)
char
存储字符的数字编码,因此count + '0'
只是两个数字的总和。实际上,数字0
,...,9
往往具有连续编码,因此将数字转换为相应字符的(编码)的快速破解是{{1} }。
digit + '0'
被解析为*p++
并且是&#34的常用习惯用法;获取*(p++)
指向的内容,然后前进p
&#34;。因此p
将*p++ = x
存储在x
最初指向的位置,之后p
指向下一个位置。
(请记住,p
的值是z++
中增加之前存储的值,而不是之后 之后的值递增)