如何理解编程语言中「流」的概念?关于C语言函数中定义结构体的问题

时间:2017-12-19 20:00:02   浏览:次   点击:次   作者:   来源:   立即下载

在 Java 相关的资料中这么说:

An object from which we can read a sequence of bytes nis called an input stream. An object to which we can write a sequence ofn bytes is called an output stream.意思应该是在面向对象中流就是对象,可以从这个对象读字节序列(输入流)或者写字节序列(输出流)。

而在学 C 的时候,说流就是字节序列。

感觉这两种对流的解释差别特别大,是因为面向对象造成的差异吗?

⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪⓪①⓪⓪①①①⓪⓪①⓪⓪①①⓪①⓪①①⓪①①⓪①⓪⓪①⓪⓪⓪①①①①⓪①①⓪①⓪①⓪①①①⓪①⓪①⓪①⓪①⓪①⓪①⓪①①①①⓪①⓪①⓪①⓪①⓪①①⓪⓪①⓪⓪①⓪①⓪①⓪①①⓪①⓪①⓪⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪①⓪⓪⓪⓪①⓪①①①⓪①⓪①①⓪⓪①①①①⓪①⓪⓪①①⓪⓪①⓪①⓪⓪...

看不清里面是什么吧,就像水①样就流过去了

自动变量(automatic variable)在离开 block 后就被标记为“这块内存可以继续重新使用”,也就是其内存并不会被擦除,有可能可以读取,但不能保证其内容永远存在,也许过两秒读出来数据就不对头了。你要知道擦除内存是个开销比较大的行为。

在某些操作系统上,如 Linux,访问这块内存会引发段错误(segment fault)。

值得指出的是这是个很明显的UB(undefined behavior,未定义行为),所以编译器在优化代码时可以做出任意行为。在 gcc 开了 O③ 的情况下,这个函数直接返回 NULL(汇编代码是 xor %eax, %eax 然后 retq)。也就是说,如果在调试模式下可以读出来这块内存,也许你改成发布模式,就直接崩溃了!\", \"extras\": \"\", \"created_time\": ①④⑦⑥⑤⓪⑥②②② · \"type\": \"answer

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息