int i,m=1;
for(i=0;i<19;i++)
{
printf("%*s\n",m<=10?10+m:30-m,"*******************"+(m<=10?20-2*m:2*m-20));
m++;
}
首先呢 ,以 m=1来说
当m=1时 解析掉里面的三目运算符
printf("%*s\n",11,"*******************"+(18));
好的 这时候我们理解一下 %*s 这里*表示输出位数 由后面的参数也就是11决定
表示输出11位字符 这时候如果你接收下printf的返回值 你会发现当m=1时 返回值为12 也就是11+\n了
,"*******************"+(18));又是什么意思呢
你可以换写下 char *p="*******************"; p+18;
这里有19个* 向右偏移18位 就只剩下一个*了 然后要输出11位 没有位数怎么办呢 当然罗用空白填充
总结第一个三目运算符m<=10?10+m:30-m决定了 printf输出的位数 第二个三目运算符m<=10?20-2*m:2*m-20
则决定了******************* 偏移的位数