免费注册 查看新帖 |

Chinaunix

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

const问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-09 21:49 |只看该作者 |倒序浏览
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
1、第一个const是什么意思;
2、src指向的内存为只读,是src指向的第一个char型为只读,还是p指向的字符串为只读啊。
小弟比较菜,望大家指点

论坛徽章:
0
2 [报告]
发表于 2010-10-09 22:01 |只看该作者
第一个const表示返回的指针指向的是块只读内存.
第二个const 修饰的是void *,是无类型的指针,表示指向的整个内存空间都是只读的。
当然这些只读你可以通过别的方法绕过去,但是不建议这么做。

论坛徽章:
0
3 [报告]
发表于 2010-10-09 22:05 |只看该作者
那它指向的整个内存空间,怎么定义整个啊

论坛徽章:
0
4 [报告]
发表于 2010-10-09 22:07 |只看该作者
那它指向的整个内存空间,怎么定义整个啊
lilikoo 发表于 2010-10-09 22:05

这个是由使用者定义的。
例如你malloc了100字节内存,然后传过去,整个可以理解为100字节。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
5 [报告]
发表于 2010-10-09 22:10 |只看该作者
第二个确切的理解是inet_ntop函数体不会对src的实参所指向的数据做任何的修改.

论坛徽章:
0
6 [报告]
发表于 2010-10-09 22:12 |只看该作者
第二个确切的理解是inet_ntop函数体不会对src的实参所指向的数据做任何的修改.
cobras 发表于 2010-10-09 22:10

恩,是这么理解的~对于函数来说,这块内存是只读的,所以它不会修改,算是一种默认规则吧。

论坛徽章:
0
7 [报告]
发表于 2010-10-09 22:14 |只看该作者
char *p = (char *)malloc(n);
我把p+1传进函数,那在函数里,是不是p指向char型不是可读,p+1...p+n-1指向的char型可读啊

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
8 [报告]
发表于 2010-10-09 22:15 |只看该作者
同时,相应的是inet_ntop希望调用者不要修改其返回指针所指向的内容.

论坛徽章:
0
9 [报告]
发表于 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开始的一段内存是只读的。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
10 [报告]
发表于 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



    请仔细理解函数参数的意义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP