#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int func(int a[],int length)
{
int i;
int count;
count = 0;
for(i = 0;i<length;i++)
{
if(0==(a[i]&(a[i] - 1)))
{
count++;
}
}
return count;
}
void main()
{
int a[] = {2,5,8,16,9};
int length;
length = sizeof(a)/sizeof(int);
printf("%d",func(a,length));
}
一开始犯二了,结果输出1;检查了一遍发现原来计算数组长度的函数用错了
一开始计算数组长度程序如下:
int length;
length = strlen(a);
上网查了下strlen的原型:
extern unsigned int strlen(char *s);
计算给定字符串的(unsigned int型)长度,不包括’\0’在内;不能拿来计算一个整形数组的长度。