C io函数参数类型差异

yanquan 发布于 2013/08/13 10:35
阅读 185
收藏 0

ssize_t write(int f i l e d e s, const void *b u f f, size_t n b y t e s);

ssize_t read(int f i l e d e s, void *b u f f, size_t n b y t e s) ;

 两函数的第二个参数类型为什么不一样?

加载中
0
小耶果
小耶果

引用来自“中山野鬼”的答案

引用来自“小耶果”的答案

const void* 常量指针,告诉你这个函数不会改变你*(void*)的内容.
这么说没啦。哈。我一般这么理解,指针指向一个常量区域,至少在这个函数执行的生命周期内是这样的。
我个人认为这个const只是给编译器的一个提示,让编译期间对你的代码进行审核.从技术上来说这是一个逻辑的过程而非技术上的需要.如果指针指向一个常量区,那么在运行期间指定代码是不能修改常量区内容的.即使欺骗了编译器也将导致运行失败.但是这里的const void* 在函数体内可以轻易*(void*)来转变指针类型从而达到违背函数约定修改指针指向内存的内容的目的.所以二者之间还是有一些概念上的差距,虽然这是极不负责的写法.
0
Appcrashes
Appcrashes
我知道,但是我不知道如何告诉你!
y
yanquan
额 ???
0
小耶果
小耶果
const void* 常量指针,告诉你这个函数不会改变你*(void*)的内容.
0
中山野鬼
中山野鬼

引用来自“小耶果”的答案

const void* 常量指针,告诉你这个函数不会改变你*(void*)的内容.
这么说没啦。哈。我一般这么理解,指针指向一个常量区域,至少在这个函数执行的生命周期内是这样的。
0
中山野鬼
中山野鬼

引用来自“小耶果”的答案

引用来自“中山野鬼”的答案

引用来自“小耶果”的答案

const void* 常量指针,告诉你这个函数不会改变你*(void*)的内容.
这么说没啦。哈。我一般这么理解,指针指向一个常量区域,至少在这个函数执行的生命周期内是这样的。
我个人认为这个const只是给编译器的一个提示,让编译期间对你的代码进行审核.从技术上来说这是一个逻辑的过程而非技术上的需要.如果指针指向一个常量区,那么在运行期间指定代码是不能修改常量区内容的.即使欺骗了编译器也将导致运行失败.但是这里的const void* 在函数体内可以轻易*(void*)来转变指针类型从而达到违背函数约定修改指针指向内存的内容的目的.所以二者之间还是有一些概念上的差距,虽然这是极不负责的写法.
确实是这个问题。函数接口声明,实际还是个程序员看的。相互之间有个共识,对存储区的性质。不过我的理解,如果是在设计write函数本身,那么更多的价值在于告诉设计者,这个空间不要写操作。而如果是调用者,则告诉外部调用者,这个空间在函数调用期间不要做写操作。哈。
0
返回顶部
顶部