使用sizeof(数组)的宏未提供预期的输出

Nik*_*hil 1 c

#include <stdio.h>
int arr[] = {1, 2,3,4,5};
#define TOT (sizeof(arr)/sizeof(arr[0]))

int main()
{
    int d = -1, x = 0;
    if(d<= TOT){
       x = arr[4];
       printf("%d", TOT);
    }
    printf("%d", TOT);
}
Run Code Online (Sandbox Code Playgroud)

TOT的值为5,但if条件失败..为什么?

pmg*_*pmg 5

因为在工作中有"通常的算术转换" if.

所述sizeof操作者返回一个无符号类型...并d转换为无使其比在元件的数量更大arr.

尝试

#define TOT (int)(sizeof(arr)/sizeof(arr[0]))
Run Code Online (Sandbox Code Playgroud)

要么

 if(d<= (int)TOT){
Run Code Online (Sandbox Code Playgroud)