免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1892 | 回复: 8
打印 上一主题 下一主题

[C] C static和static局部变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-03 10:43 |只看该作者 |倒序浏览
int mygetchar_v2()
{
        static char buff[1024];
        static char *bufp = buff;
        static int n = 0;


        if (0 == n)
        {
                n = read(0, buff, sizeof buff);
                //第一个是文件描述符(0-stdin, 1-stdout, 2-stderr),二个是缓冲,三是缓冲区大小
                bufp = buff;
        }


        return (--n >= 1) ? (unsigned char) *bufp++ : EOF;
}

麻烦帮助理解以上代码,以上函数在主函数中被连续调用不止一次。谢谢。

论坛徽章:
0
2 [报告]
发表于 2013-06-03 10:44 |只看该作者
自己沙发。先谢过大神们了。{:3_193:}

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2013-06-03 12:53 |只看该作者
static 关键字就是程序级全局变量,程序启动时初始化(未测试多进程任务是个什么情况)

但是放到函数里,就说明变量还接受作用域,,,函数外不能访问的全局变量

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
4 [报告]
发表于 2013-06-03 12:58 |只看该作者
回复 2# misterhappy
将从标准输入读到的字符串,一个一个的返回给程序,最后一个字符返回文件结束符(一般为换行符)。


   

论坛徽章:
0
5 [报告]
发表于 2013-06-03 14:15 |只看该作者
请问经过几次函数调用会完全返回buf中的字符。假设buf装满。
井蛙夏虫 发表于 2013-06-03 12:58
回复 2# misterhappy
将从标准输入读到的字符串,一个一个的返回给程序,最后一个字符返回文件结束符(一 ...

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
6 [报告]
发表于 2013-06-03 15:09 |只看该作者
回复 5# misterhappy
不应该假设次数。
你可以通过判断返回值是否为EOF来判断是否读完。


   

论坛徽章:
0
7 [报告]
发表于 2013-06-03 15:56 |只看该作者
static char buff[1024];

n = read(0, buff, sizeof buff);
这一句。每次调用mygetchar_v2()执行到这一句的时候,buff和n的值都被更新了。

return (--n >= 1) ? (unsigned char) *bufp++ : EOF;
这一句只判断是否有读入字符到buf中。
那么,我想请教的是:这个函数my**_v2()是如何全部将buf中的字符返回的。谢谢。

井蛙夏虫 发表于 2013-06-03 15:09
回复 5# misterhappy
不应该假设次数。
你可以通过判断返回值是否为EOF来判断是否读完。

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
8 [报告]
发表于 2013-06-03 17:56 |只看该作者
回复 7# misterhappy
static int n = 0;只在第一次调用这个函数时会执行,后来的调用都不会执行。所以,在执行if(0==n)这句时,n不是总为0。


   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2013-06-03 18:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP