小问题了
char* 类型数组 可以用NULL来判断是否结束那么int* 型数组 如何判断是否结束呢
int f_find(int *s,int f)
{
int ret=0;
while(*s!=NULL) //这个语句不能用啊
{
if(*s==f) ret++;
*s++;
}
return ret;
}
#include <stdio.h> typedef int Type; #define VALUE Type #define ITER Type* ITER f_find(ITER begin, ITER end, VALUE val) { while(begin != end) { if( *begin == val) return begin; ++end; } return begin; } int main() { int s[] = {1, 3, 3, 4, 3, 3, 3}; int *p=&s[0]; p++; //从数组第2位向后找 ITER s_begin = p; ITER s_end = p + sizeof(p) / sizeof(p[0]); ITER result = f_find(s_begin, s_end, 3); printf("共找到了%d 个 %d\n", *result,3); //期待打印结果是 共找到了5个3 return 0; }这个应该怎么修改呢
#include <stdio.h> typedef int Type; #define VALUE Type #define ITER Type* // 泛型count计数算法 int f_count(ITER begin, ITER end, VALUE val) { int count = 0; while(begin != end) //这里end=10044 begin=10000 { //printf("begin=%x,end=%x\n",begin,end); //经过这句代码验证了下面的猜测 if( *begin == val) ++count; ++begin; //这里begin步长为4 } return count; } int main() { int s[] = {1, 3, 3, 4, 3, 3, 3, 5, 4, 3, 3}; int *p=&s[0]; p++; p++;//从数组第3位向后找 ITER s_begin = p; //这里假定s_begin=p=10000 ITER s_end = p + sizeof(s) / sizeof(s[0]); //这里s_end=10000+数组元素长11*4=10044 /* 感觉这里s_end越界了 p是第3个元素,p+11就是第14个元素了,所以我用了一句 ITER s_end = p + sizeof(s) / sizeof(s[0])-8; 向前串2个单元,好了 有5个3被吃掉了,不理解呢 */ int result = f_count(s_begin, s_end, 3); printf("共找到了%d 个 %d\n", result,3); return 0; }