for while等循环条件语句中的前置和后置递加(++)的执行顺序怎么
for while等循环条件语句中的前置和后置递加(++)的执行顺序如何?
char *st="the world is big!\n";
int len=0;
while(*st++)++len;
可将st的值假设为0001,以上循环体的执行顺序如何?前置和后置有无区别?引申一下更好。
------解决方案--------------------
char *st="the world is big!\n";
int len=0;
while(*st++)++len;
可将st的值假设为0001
"the world is big!\n"字串的地址从0001开始,假设你机器上的char型是一个字节则第十九个字符为'\0'
因为每个字符串存储空间要比实际长度多一个字节,用来存储'\0'以标识此为字符串。
while(*st++)
这里虽然+优先级高于*但是是后置++,后置++特点是先用其前变量进行运算(注意运算有很多种),所以先用st作解引用运算。然后st再增加一个字节长度。还是不太明白的话建议看《the c programing language》
------解决方案--------------------
while(*++st)先将st后移一个字节,再判断*st是否为0
while(*st++)先排断*st是否为'\0',再将st后移一个字节
因此
while(*st++)++len; 后len为18
while(*++st)++len; 后len为17
------解决方案--------------------
(*st++)是从第一个字母t开始判断,而(*++st)是从第二个字母h开始判断的
可以参考上面一位写的,很好!!!
------解决方案--------------------
计算字符串的长度~~~应该用后置~~~
用前置就变成从第二个字符开始了~~~·
char *st="the world is big!\n";
int len=0;
while(*st++)++len;
可将st的值假设为0001,以上循环体的执行顺序如何?前置和后置有无区别?引申一下更好。
------解决方案--------------------
char *st="the world is big!\n";
int len=0;
while(*st++)++len;
可将st的值假设为0001
"the world is big!\n"字串的地址从0001开始,假设你机器上的char型是一个字节则第十九个字符为'\0'
因为每个字符串存储空间要比实际长度多一个字节,用来存储'\0'以标识此为字符串。
while(*st++)
这里虽然+优先级高于*但是是后置++,后置++特点是先用其前变量进行运算(注意运算有很多种),所以先用st作解引用运算。然后st再增加一个字节长度。还是不太明白的话建议看《the c programing language》
------解决方案--------------------
while(*++st)先将st后移一个字节,再判断*st是否为0
while(*st++)先排断*st是否为'\0',再将st后移一个字节
因此
while(*st++)++len; 后len为18
while(*++st)++len; 后len为17
------解决方案--------------------
(*st++)是从第一个字母t开始判断,而(*++st)是从第二个字母h开始判断的
可以参考上面一位写的,很好!!!
------解决方案--------------------
计算字符串的长度~~~应该用后置~~~
用前置就变成从第二个字符开始了~~~·