int isspace(int c)
函数说明:检查参数c是否为空格字符
for (i=0,t=0;p[i]!='\0';i+=2)
if (! isspace (*p+i)&&(*(p+i)!='a'))
ts[t++]=toupper(p[i]);
ts[t]='\0';
strcpy(p,ts);
分析:
p开始指向字符数组str的首地址,即指向了字符'a'。
然后i以每加2一跳, 判断如果 *p+i 的值不是空格 且 *(p+i)的值不为字符'a'的话,就把当前这个字符变大写字符, 然后用数组ts保存。最终再一致拷贝覆盖到原来的字符数组str中。
i = 0, *p+i = 'a'+0='a', *(p+i) = *p ='a'.这时不满足if条件。i = i+2=0+2=2
i = 2, *p+i = 'a'+2='c', *(p+i) = *(p+2) ='b', 满足if条件,
ts[0]='B',i=i+2 = 2+2 =4
i = 4,*p+i = 'a'+4='e', *(p+i) = *(p+4) ='c' ,满足if条件,ts[1]='C'。i=i+2=4+2=6
i = 6, *p+i = 'a'+6='g', *(p+i) = *(p+6) ='d', 满足if条件,ts[2]='D'。i=i+2=6+2=8
i = 8, *p+i = 'a'+8='i', *(p+i) = *(p+8) ='e', 满足if条件,ts[2]='E'。i=i+2=8+2=10
i = 10, *p+i = 'a'+10='k', *(p+i) = *(p+6) =' '(空格), 满足if条件,ts[2]='D'。i=i+2=10+2=12
i = 12, *p+i = 'a'+12='m', *(p+i) = *(p+12) ='\0', 满足if条件,但不满足for条件, 这时退出for循环。
所以最终的结果是:BCDE+(空格)