| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 490 人关注过本帖
标题:小问题了
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:10 回复次数:7 
小问题了
char* 类型数组 可以用NULL来判断是否结束
那么int* 型数组 如何判断是否结束呢

int f_find(int *s,int f)
{
    int ret=0;
    while(*s!=NULL)    //这个语句不能用啊
    {
        if(*s==f) ret++;
        *s++;
    }
    return ret;
}
搜索更多相关主题的帖子: 如何 return 
2012-11-30 12:37
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
谢谢  收了


DO IT YOURSELF !
2012-11-30 13:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
利用指针给数组赋值,标记一下
程序代码:
int main(void)
{
   int t[5];
   int *p;
   p=&t[0];
   for(int i=0;i<5;i++)
   {
       *p=i+10;
       printf("*p=%d  t[]=%d\n",*p,t[i]);
       p++;
   }
   return 0;
}

DO IT YOURSELF !
2012-11-30 13:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
NEWDOWS大虾,我还是没看懂你的程序的核心
程序代码:
#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;
}
这个应该怎么修改呢

DO IT YOURSELF !
2012-11-30 14:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用newdos在2012-11-30 13:48:55的发言:

你可以在理解指针的基础上看这个, ITER 本身就是英文:iterator 迭代器的缩写, 迭代器本身就是指针的原理.
f_find 在这里的作用就是泛型算法:查找值的泛型写法.
有两个问题留给你: 1.s_begin 指向哪里? 2.s_end 又指向哪里? 为什么s_end可以指向那里?
哦 抱歉,刚刚没看到这个

这个我无法立马回复   我会慢慢边搜索边研究的  谢谢

DO IT YOURSELF !
2012-11-30 14:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我试着回复你的那2个问题,但是又有新的问题了 详见内
程序代码:
#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;
} 


[ 本帖最后由 wp231957 于 2012-11-30 15:18 编辑 ]

DO IT YOURSELF !
2012-11-30 15:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
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的前一项就不是数组的最后一个元素了吧

DO IT YOURSELF !
2012-11-30 15:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
谢谢newdos大虾

我想这个问题多少明白一些了

这是我在网上搜的一点东东
大多数泛型算法是工作于容器的一对迭代器所标识的范围,并完全通过迭代器来实现其功能。这段由迭代器指定的范围称为“输入范围”。带有输入范围参数的算法总是使用前两个参数标记该范围,分别指向要处理的第一个元素和最后一个元素的下一个位置。



DO IT YOURSELF !
2012-11-30 15:52
快速回复:小问题了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024294 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved