小问题了
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;
//typedef double Type; 修改这里
#define VALUE Type
#define ITER Type*
ITER f_find(ITER begin, ITER end, VALUE val)
{
while(begin != end)
{
if( *begin == val) return begin;
++begin;
}
return end;
}
int main()
{
int s[] = {1, 2, 3, 4};
//double s[] = {1.1f, 1.2f, 1.3f, 1.4f}; 修改这里
ITER s_begin = s;
ITER s_end = s + sizeof(s) / sizeof(s[0]);
ITER result = f_find(s_begin, s_end, 3);
//ITER result = f_find(s_begin, s_end, 1.3f); 修改这里
if(result != s_end )
printf("找到了该值 %d\n", *result);
//printf("找到了该值 %.2f\n", *result); 修改这里
else
printf("没有找到该值\n");
return 0;
}
程序代码:#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;
} 