如何理解编程语言中「流」的概念?关于C语言函数中定义结构体的问题
在 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
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
