#include <stdio.h>
#include <math.h>
#define STR "#############"
#define SLEN (int)(sizeof(STR)-1) //(int)是必须的,理由大家自己思考
int main() {
int n;
for (n=SLEN/2;n>=-SLEN/2;n--)
printf("%*.*s\n",SLEN-abs(n),SLEN-abs(n)*2,STR);
return 0;
}
来了😁
(int)是强制类型转换,sizeof的返回值是unsigned int 无符号类型在参加运算时无法表达负数
所以需要强制类型转化成int来进行运算
祈求时间🥺:
如果有帮助请帮舒文点个采纳谢谢
sizeof返回值为size_t,为无符号整数。在后面的for循环条件中,SLEN前有符号,对于无符号数来说无意义。
sizeof的返回值是size_t也就是无符号整形,无符号整形在参与运算可能会出现某些特别大的数字,比如1-2得到的不是-1而是一个很大的数字,所以要强转成有符号整形
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!CPU处理计算是没有减法的,只是模拟加法运算,无符号整型要运算需强转,不转的话会将负数转化为超大正数,希望帮到你