str[i]>str[j]表示str[i]的ascii码比str[j]的ascii码大,从ascii表中可知,排在后面的字母(如z)比前面(如a)的大,小写的字母比大写的大,大小写字母都比' '(空格)大。
开始时,str[i]是'o',str[j]是'G',然后,循环开始:
循环第一次:由于'o'比'G'大,所以j被赋为1。这时str[j]为'o'。i++使得str[i]指向了下一个字符
第二次:'o'和'o'相等。所以j值不用变
如此继续,'d'比'o'小、' '比'o'小、'm'比'o'小、'o'等于'o'
第七次:'r'比'o'大,j被赋为7。这时str[j]为'r'。
如此一直到最后,都没有比'r'大的了。i移到了指向字符串末尾(即空字符)处,循环退出。
然后把这个空字符赋给'r'所在的那个位置的内存。
所以字符串数组就变成了这样{'G', 'o', 'o', 'd', ' ', 'm', 'o', '\0', 'n', 'i', 'n', 'g', '\0'}
由于puts函数遇到空字符就会中断输出,所以输出的是Good mo