以下是引用rjsp在2022-7-11 09:52:26的发言:
似乎,你对C/C++一点儿也不懂呀
以输入 123 为例:
123 是0吗?不是0,那获取其个位(即 123%10==3),然后将 3 转化成 '3'(即 3+'0'=='3'),将'3'保存到s指向的存储空间(即 *s='3'),s指向下一个位置(即 s++),123去掉其个位变为12(即 123/10==12);
12 是0吗?不是0,那获取其个位(即 12%10==2),然后将 2 转化成 '2'(即 2+'0'=='2'),将'2'保存到s指向的存储空间(即 *s='2'),s指向下一个位置(即 s++),12去掉其个位变为1(即 12/10==1);
1 是0吗?不是0,那获取其个位(即 1%10==1),然后将 1 转化成 '1'(即 1+'0'=='1'),将'1'保存到s指向的存储空间(即 *s='1'),s指向下一个位置(即 s++),1去掉其个位变为0(即 1/10==0);
0 是0吗?是0,那循环终止。
字符串是以'\0'这个标志结尾的,所以最后还要在 '3'、'2'、'1' 后面补个 '\0'
我是用我已学的基本知识来的。
1. 一般++运算符只能用在数值类型上的,我第一次学到++运算符还能在字符型用的。
2. 如果按照你的方法“*s='2'”、“*s='1'”等的意思分别是“将‘2’赋值给*s”、“将‘1’赋值给*s”,但*s是数组,这样可能报错,也可能转换成{'2','\0','\0',……}的样子。但刚才两种说法都错,因为你说字符型数组用++会指向下一个位置,赋值的是到当前位置的。既然如此,那为什么“*s=3”明明中间是等于号,表示“赋值给*s”,没指定下标,却不把整个数组赋了,等号的意义也就变了啊!(等号本是绝对等于)
3. 明明比如“2+'0'”结果是字符串"20"啊(整数隐式转换成字符),为什么“2+'0'==2”呢?
4. 明明直接一个“(char)num”就行了啊,为什么要这么繁琐的操作?