免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhangsuozhu
打印 上一主题 下一主题

求高手给个价,能写这样代码的程序员月薪应该给多少? [复制链接]

论坛徽章:
0
181 [报告]
发表于 2010-07-22 18:56 |只看该作者
我也没找到IP

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
182 [报告]
发表于 2010-07-22 20:34 |只看该作者
p姨肯定能看啦。{:3_192:}

论坛徽章:
0
183 [报告]
发表于 2010-07-22 20:57 |只看该作者
服了,这都不知道?

论坛徽章:
0
184 [报告]
发表于 2010-07-22 21:36 |只看该作者
还行,不提倡

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
185 [报告]
发表于 2010-07-22 21:50 |只看该作者
回复 156# mileszhao

技术和人品的话, 应该崇拜这个 —— 群雄逐鹿中原。
我是上来喷的, 不在意rp。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
186 [报告]
发表于 2010-07-22 22:10 |只看该作者
回复 159# pandaiam

这代码里的(void*)转换和追加0不需要这么写, 所以也不需要去弄明白"为什么要这样做"。
下面是"为什么不需要这么做"。

void*本来就是为了仅仅表现一个地址而不表现类型而设计出来的。
在C标准化之前, 这个角色是char*担当。

那个时候的代码是这样:

  1. char* malloc(unsigned s);
  2. /* 返回值我都忘记是啥了 */free(char* p);
  3. char* memset(char* dst, int val, unsigned s);
复制代码

  1. T* a = (T*)malloc( n * sizeof(T) );
  2. memset( (char*)a, 0, n * sizeof(T) );
  3. free( (char*) a );
复制代码
之后引入void*:
任意类型指针都可以隐式转换到void*。(C++同样)
void*也可以隐式转换到任意指针。 (C++有区别, 必须显式)
一个类型为T*的对象转换为void*对象, 然后再转换回T*, 保证值不变。

这样, 代码就变成了这样:

  1. void* malloc(size_t s); // 还引入了size_t
  2. void free(void* p);
  3. void* memset(void* dst, int val, size_t s);
复制代码
上面的3处类型转换都不需要了:

  1. /* 如果需要兼容C++, 下一行注释部分需要 */
  2. T* a =/* (T*) */malloc( n*sizeof(T) );
  3. memset(a, 0, sizeof(T) );
  4. free(a);
复制代码
C89标准里就有void*了。 21年了。
lz那种写法, 完全"没错"; 只是多余, 完全不了解void*被引入的意图。

学任何技术, 严谨很重要的态度。
以lz那种治学态度, 在137楼一边喊着避免段错误, 一边写出段错误的代码, 绝对不是偶然。


对了, 从技术上讲, 真存在一些地方显示的void*转化是必须加的。
—— 比如在没有函数原型或者变长参数列表的时候

  1. int i = ...;
  2. printf("%p\n", (void*)&i );
  3. printf("null=%p\n", (void*)0 );
复制代码
只是那种指针格式怪异的平台越来越少, 所以很多时候不加也不会出错。

论坛徽章:
0
187 [报告]
发表于 2010-07-22 22:20 |只看该作者
回复  pandaiam
对了, 从技术上讲, 真存在一些地方显示的void*转化是必须加的。
—— 比如在没有函数原型或者变长参数列表的时候

   1. int i = ...;
   2. printf("%p\n", (void*)&i );
   3. printf("null=%p\n", (void*)0 );

复制代码
只是那种指针格式怪异的平台越来越少, 所以很多时候不加也不会出错。
OwnWaterloo 发表于 2010-07-22 22:10

请问为什么在变参里面要用void*,我曾经在变参里面犯过这样的错误,虽然改正,但是一直没有找到明确的解释,请指教!

论坛徽章:
0
188 [报告]
发表于 2010-07-22 22:23 |只看该作者
嗯  不知道有什么行业知识 仅仅靠这点c语言估计找好工作困难

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
189 [报告]
发表于 2010-07-22 22:26 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
0
190 [报告]
发表于 2010-07-22 22:31 |只看该作者
呵呵 这要是值12k 那很多人都会觉得自己亏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP