打印

C51函数static变量的问题

[复制链接]
4380|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lifufeng|  楼主 | 2009-3-10 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个函数里面定义了个i变量,每次调用都是令i=0,函数里面的i++有什么意思啊?还有这里有两个return怎么回事???谢谢帮忙解答.

unsigned char scan_key(void)
{
    unsigned char j;         
    static unsigned char i=0;
    ROW = 255-(1<<i); //列扫描低电平有效,FE,FD,FB,F7
    if(LINE!=0xff) 
        for(j=0;j<8;j++) 
            if(LINE==(255-(1<<j))) return (j+(i<<3));
    i++; i&=0x03;
    return(0xff);
}

相关帖子

沙发
mxh0506| | 2009-3-10 12:29 | 只看该作者

再多学习点C基础吧

这里的static关键字表示将变量i分配到堆里,并且初始化成0

使用特权

评论回复
板凳
mxh0506| | 2009-3-10 12:30 | 只看该作者

两个return没有什么不妥啊?

需要几个就用几个呗! 它只不过是表示退出函数,并返回需要的值.

使用特权

评论回复
地板
lifufeng|  楼主 | 2009-3-10 13:44 | 只看该作者

谢谢回复~

那个i=0在里面使用一次,再调用时还是0啊;
两个return我知道是可以用,关键是两个是同一流水线上的,都执行,返回两个值吗?

使用特权

评论回复
5
芯行天下| | 2009-3-10 15:28 | 只看该作者

不是返回两个值

不是反回两个值
 unsigned char j;         
    static unsigned char i=0;
    ROW = 255-(1<<i); //列扫描低电平有效,FE,FD,FB,F7
    if(LINE!=0xff) 
        for(j=0;j<8;j++) 
            if(LINE==(255-(1<<j))) return (j+(i<<3));
    i++; i&=0x03;
    return(0xff);

当IF语句成立时,返回(j+(i<<3))

当IF语句不成立时,返回0XFF

使用特权

评论回复
6
渤海三叠浪| | 2009-3-10 19:24 | 只看该作者

这个函数不是楼主写得吧!!

函数写得比较差。所以楼主没有必要研究这么深!!!

使用特权

评论回复
7
johnwjl| | 2009-3-10 20:02 | 只看该作者

建议多看点基础的书。

使用特权

评论回复
8
ayb_ice| | 2009-3-10 20:41 | 只看该作者

静态局部的初始化可不是每次都执行

其实是在第一次调用前初始化.

使用特权

评论回复
9
bxb_lhj| | 2009-3-11 16:26 | 只看该作者

楼上正解

使用特权

评论回复
10
松松电子| | 2009-3-11 21:08 | 只看该作者

来凑热闹,

使用特权

评论回复
11
lifufeng|  楼主 | 2009-3-12 07:00 | 只看该作者

~

哈,谢谢各位了,读了遍基础,搞明白了,"静态局部的初始化可不是每次都执行",那个return,没有条件限制时就是返回第一个,后面的就不管了,试过直接过个实践证明。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

109

帖子

0

粉丝