Chinaunix

标题: const问题 [打印本页]

作者: lilikoo    时间: 2010-10-09 21:49
标题: const问题
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
1、第一个const是什么意思;
2、src指向的内存为只读,是src指向的第一个char型为只读,还是p指向的字符串为只读啊。
小弟比较菜,望大家指点
作者: davelv    时间: 2010-10-09 22:01
第一个const表示返回的指针指向的是块只读内存.
第二个const 修饰的是void *,是无类型的指针,表示指向的整个内存空间都是只读的。
当然这些只读你可以通过别的方法绕过去,但是不建议这么做。
作者: lilikoo    时间: 2010-10-09 22:05
那它指向的整个内存空间,怎么定义整个啊
作者: davelv    时间: 2010-10-09 22:07
那它指向的整个内存空间,怎么定义整个啊
lilikoo 发表于 2010-10-09 22:05

这个是由使用者定义的。
例如你malloc了100字节内存,然后传过去,整个可以理解为100字节。
作者: cobras    时间: 2010-10-09 22:10
第二个确切的理解是inet_ntop函数体不会对src的实参所指向的数据做任何的修改.
作者: davelv    时间: 2010-10-09 22:12
第二个确切的理解是inet_ntop函数体不会对src的实参所指向的数据做任何的修改.
cobras 发表于 2010-10-09 22:10

恩,是这么理解的~对于函数来说,这块内存是只读的,所以它不会修改,算是一种默认规则吧。
作者: lilikoo    时间: 2010-10-09 22:14
char *p = (char *)malloc(n);
我把p+1传进函数,那在函数里,是不是p指向char型不是可读,p+1...p+n-1指向的char型可读啊
作者: cobras    时间: 2010-10-09 22:15
同时,相应的是inet_ntop希望调用者不要修改其返回指针所指向的内容.
作者: davelv    时间: 2010-10-09 22:20
char *p = (char *)malloc(n);
我把p+1传进函数,那在函数里,是不是p指向char型不是可读,p+1...p+n-1指向 ...
lilikoo 发表于 2010-10-09 22:14

函数声明的那些参数列表中都是形参,不管你传什么进去,只要你是正确传过去的(没有语法错误),它都按形参定义的方式进行处理,而不会理会你的实参原来的样子。
所以在这里,它会认为p+1开始的一段内存是只读的。
作者: cobras    时间: 2010-10-09 22:21
char *p = (char *)malloc(n);
我把p+1传进函数,那在函数里,是不是p指向char型不是可读,p+1...p+n-1指向 ...
lilikoo 发表于 2010-10-09 22:14



    请仔细理解函数参数的意义
作者: cobras    时间: 2010-10-09 22:22
void *指针是为了某种语法上的通用性.但通用不等于随意,得符合函数要求才行啊!
作者: lilikoo    时间: 2010-10-09 22:26
我理解你说的了,我有点转牛角尖了
作者: cobras    时间: 2010-10-09 22:27
我记得没错的话,inet_ntop的src参数应该指向是ip地址吧,如struct in_addr或者struct in6_addr等等.好久没用了,自己man吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2