请问为什么本题(int)是必须的呢?


#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而是一个很大的数字,所以要强转成有符号整形

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

CPU处理计算是没有减法的,只是模拟加法运算,无符号整型要运算需强转,不转的话会将负数转化为超大正数,希望帮到你