注意sizeof 返回值类型

  • Post author:
  • Post category:其他


假设有代码片段:

int a[]={1,2,3,4,5};

int i;

for(i=-1;i<sizeof(a)/sizeof(a[0]);i++)

printf(“%d “,a[i]);

请问其循环次数是多少?

应该是0次,问题的关键在于sizeof的返回值类型,是一个size_t型,而size_t是这样定义的,typedef unsigned int size_t,也就是说它是一个unsigned int型。因此当执行i<sizeof(a)/sizeof(a[0])时会把i转换为unsigned int型,因此这时的i是大于sizeof(a)/sizeof(a[0])它,所有不执行循环,可以将i改为i=2^32-1,循环便可正常执行。



版权声明:本文为Unimen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。