存档

‘转载’ 分类的存档

字符数组,字符指针,Sizeof总结-转载技术文章

2010年3月3日 huubby 没有评论

今天有位同事问到关于字符串数组和字符串指针的问题,我简单讲了一下。回来之后细想想讲的有点问题,本来想总结一下写篇blog详细说说,但随便一搜,网上很多讲的很好的文章,我从博客园转这篇讲的挺好的文章放这里,有兴趣的可以看看。原文在这里,作者是JeffChen。

1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写”abc”,那么编译器帮你存储的是”abc\0″

2.”abc”是常量吗?答案是有时是,有时不是。

不是常量的情况:”abc”作为字符数组初始值的时候就不是,如char str[] = “abc”;
因为定义的是一个字符数组,所以就相当于定义了一些空间来存放”abc”,而又因为字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为 char str[3] = {‘a’,'b’,'c’};
又根据上面的总结1,所以char str[] = “abc”;的最终结果是 char str[4] = {‘a’,'b’,'c’,'\0′};
做一下扩展,如果char str[] = “abc”;是在函数内部写的话,那么这里的”abc\0″因为不是常量,所以应该被放在栈上。

是常量的情况:  把”abc”赋给一个字符指针变量时,如
char* ptr = “abc”;
因为定义的是一个普通指针,并没有定义空间来存放”abc”,所以编译器得帮我们找地方来放”abc”,显然,把这里的”abc”当成常量并把它放到程序的常量区是编译器最合适的选择。所以尽管ptr的类型不是const char*,并且ptr[0] = ‘x’;也能编译通过,但是执行ptr[0] = ‘x’;就会发生运行时异常,因为这个语句试图去修改程序常量区中的东西。记得哪本书中曾经说过char* ptr = “abc”;这种写法原来在c++标准中是不允许的,但是因为这种写法在c中实在是太多了,为了兼容c,不允许也得允许。虽然允许,但是建议的写法应该是const char* ptr = “abc”;这样如果后面写ptr[0] = ‘x’的话编译器就不会让它编译通过,也就避免了上面说的运行时异常。
又扩展一下,如果char* ptr = “abc”;写在函数体内,那么虽然这里的”abc\0″被放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,只不过是它所指向的东西被放在常量区罢了。

3.数组的类型是由该数组所存放的东西的类型以及数组本身的大小决定的。
如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4],也就是说尽管s1和s2都是字符数组,但两者的类型却是不同的。

4.字符串常量的类型可以理解为相应字符常量数组的类型,如”abcdef”的类型就可以看成是const char[7]

5.sizeof是用来求类型的字节数的。如int a;那么无论sizeof(int)或者是sizeof(a)都是等于4,因为sizeof(a)其实就是sizeof(type of a)

6.对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型,如对于void func(char sa[100],int ia[20],char *p),则sa的类型为char*,ia的类型为int*,p的类型为char*

7.根据上面的总结,来实战一下:
对于char str[] = “abcdef”;就有sizeof(str) == 7,因为str的类型是char[7]。
也有sizeof(“abcdef”) == 7,因为”abcdef”的类型是const char[7]。
对于char *ptr = “abcdef”;就有sizeof(ptr) == 4,因为ptr的类型是char*。
对于char str2[10] = “abcdef”;就有sizeof(str2) == 10,因为str2的类型是char[10]。
对于void func(char sa[100],int ia[20],char *p),就有sizeof(sa) == sizeof(ia) == sizeof(p) == 4,
因为sa的类型是char*,ia的类型是int*,p的类型是char*。

【奇文赏析】百度首席产品设计师孙云丰评论谷歌退出中国事件

2010年1月13日 huubby 2 条评论

今天最大最劲爆的新闻就是google总部宣布考虑退出中国市场,上午百度的孙云丰同学就迫不及待跳出来表明自己的态度。结果下午又怂了,先是删除了自己百度空间里的帖子,然后又要求CSDN删除了转载帖子。不过好在伟大的推神有截图,请看这里(感谢推友@dupola),还有这里(感谢推友@Bamind)。这篇是从MSN SPACE转过来的,原文在这里

———————————————鄙视的分割线-上—————————————————

关于谷歌退出中国_在地铁站 – http://hi.baidu.com/whomi/blog/item/2b1001e9be877834b80e2df6.html
作者:百度首席产品设计师孙云丰

google宣称要退出中国,所证明的,恰恰不是市面上的那些g粉所宣称的那样,google是个”人权斗士”,而刚好反了过来,正好证明google是个市侩分子。

google的首席法律顾问的调调让我感到恶心。因经济利益退出,就直白白的说好了,把自己涂脂抹粉一番,还煞有介事的提到google被中国人攻击,中国异议分子的Gmail信箱被攻击,把这些事情作为退出中国的铺垫,这种论调是侮辱中国普通老百姓的智商,但还真有可能迎合那帮目空一切,但从未到过中国、对中国没有丝毫了解,却又喜欢对中国说三道四的西方人的假想。

只提一个假设,如果谷歌占据了中国80%的搜索市场份额,google的高管,还会这么高调的宣称要do no evil,从中国退出吗?

整个事情给我的唯一感受,就是恶心。

科普一点:

信息不对称是造成社会不平等最主要的原因之一。而对普通百姓最为关键的信息,并非中南海秘闻,而是最为常规的经济、文化、科技等领域信息。尽可能的为普通老百姓对这些领域的信息提供便捷,并消弭信息占有的不对称,这是搜索引擎存在的最大社会政治意义之一。

从这个角度而言,尽可能的设法为百姓提供便捷的信息获取技术服务,提供切实的价值,而不是挂羊头卖狗肉的宣称自己do no evil和政府撕破脸皮搞壮烈,才是一种真切的负责态度。找台阶下可以,但不要拿一个高管制国家的民众感情来做台阶,这是极其不道德的。

政治环境短期内是无法改变的。在中国,每个企业或者个人,都必须戴着镣铐跳舞。其实在别国一样,只是程度之别。但这是现实。在有限的条件下,尽可能的提供自己勉力而为的一份子,才是一个真切的做企业、做人态度。

在我博客上乱喷的兄弟,甚至还有搞笑的喷我five毛党的,都回家好好的念点书,再回来喷吧。希望看得见点水平的,而不是除了咒死爹死娘就不知道说啥的。 80年代的愤青,可不是现在这副衰样儿。

————–

以上是作为一个曾经的忠实google用户而说的,和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G 粉的兄弟,请勿跟帖瞎喷,你们根本不懂什么叫搜索引擎,什么叫自由人权。

————–

btw,评论关闭。要喷到twitter上喷吧。我的地盘不欢迎。

———————————————鄙视的分割线-下———————————————————-

读后感:最后一段话真是把我恶心坏了。鄙视没种的百度公司和更怂的孙云丰同学。

分类: 转载 标签:

【转】这时候买房,就是相当于47年叛变革命……

2010年1月4日 huubby 没有评论

刚看到的一篇文章,把我自己讲不出来的朴素认识系统讲了出来。原文在这里。作者是:dayimage。

—————————————————转载分割线——————————————————————

前期对房市观点一直有些摇摆,因为总是有些想不太明白的地方,今晚躺在床上突然想清楚了是怎么回事情。所以特意爬起来写这个帖子。也许很多观点是别人说过的,但直到今晚,我头一次在逻辑上把目前的经济状况想清楚了。也把各种经济现象串联起来了。供大家讨论一下。

首先要从07经济危机开始说起。简单来说,就是美国穷人透支了未来的钱,在这个透支过程中,美国的资本家也赚足了手续费,ZF也享受了税收,世界其它国家比如中国享受着多年的中美贸易顺差。一切都很美很和谐,世界经济的黄金年代。但我们有没有见过一个长久的所有人共同富裕起来的社会呢?过去从来没有过,将来到共产主义社会也许会有。

所有人都富裕,就意味着物价必然就高了,即使物价没高,人的消费层次和欲望也不一样了。因为大家都有钱了。短短十多年前,很多人全家住在一个6,70平米的房子里也没什么好奇怪的,在我就读的那所重点中学里,很多老爸是国营单位老总或者是政府有一定级别的干部同学家,也就那么大,一套组合音响就算是奢侈品了。十多年后的今天,90平以下的房子就是ZF强令新楼盘要有一定比例的廉价货,很多人买房买车就跟买菜一样。这真的是完全因为中国人吃苦耐劳勤劳勇敢吗或者是D的政策好吗?其实很大程度上是老牌资本主义国家玩资本市场玩HIGH了在吃肉,我们抓住了时机在跟着喝汤而已。

2001纳斯达克的泡沫爆炸,那还只是美国人自己玩过头了,因为喝汤的小兄弟们还没长大,未满18岁不够资格进赌场。等国家开始动不动就强调国企要“走出去”的时候,当很多花着纳税人的国企去海外排队上市的时候,当炒房团动不动就要去美国,去迪拜抄底的时候,就说明我们已经坐在赌桌前,而这是一场荒诞的赌局,美国是老大,他押什么我们就跟着压什么,全世界都在跟庄,(所以后来美国人说对付危机要猛印钞票救市,基本全世界都只有跟着,除了澳大利亚偏安南半球又主要靠卖资源,资本市场没那么发达,所以危机过后小提了一下利率,其它国家都在等着看美国的表态呢),而这张赌桌的对面是什么呢?是一个虚幻的未来。这个未来必须要有一次很大的产业革命,类似当年的互联网的革命,使人类的生产力有一个翻天覆地的变化,当这个革命出现的时候,它所创造出的崭新的财富将会使现在这一代人所透支的这个洞给补上。我们就可以继续无忧无虑的在20岁的时候花着我们按过去速度50岁时候才有的财富。因为我们相信,在被洪水淹没之前,我们一定能弄到那张上船的船票,产业革命,就是那张票。

01年纳斯达克的崩盘,意味着互联网经济走到了尽头,在这场赌局中先失一局。然后全世界都在疯狂的找着下一个经济增长点。一度找过生物科技基因工程,还找过航天概念,纳米概念 ,这些都实在是太遥远,怎么也看不出短时间内能找出走入寻常人生活的概念。终于,全世界都找到了一个,或者说以为找到了一个,又或者说不管真假都只能宣称找到了的一个增长点。

它的名字就叫做:低碳经济
阅读全文…

分类: 社会话题, 转载 标签:

【转】计算机编程新人入行指导

2009年12月24日 huubby 没有评论

TopLanguage的置顶帖之一,说的非常到位,google group被墙导致可能有人看不到,所以我转来这里。粗体部分是个人觉得最重要而自己没有做到的地方。

———————————————–转载分割线—————————————————

首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读他妈的文档”,这是在新闻组或者论坛里可能常见的回复,一些人
娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单
问题,这些问题实际上都在项目文档或者软件规范里就明白写着。
一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修
改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽
快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,
可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有
什么进展,领导看了还以为在磨洋工呢。
**注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉八九个大笔记本,里面写着项目开发
的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。
如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注
意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。
**注意事项二,接到一个项目第一个要问的就是这个项目结束期限(dead line)是什么,这样心里比较容易对进度有个估计,免得最后无法完成任
务。领导可能会反过来咨询老程序员对分到的项目难度估计。一般来说,估计一个大概的编码时间,然后把估计时间乘二,留出一定余量比较好。
读文档不要作为一个整体任务完成,可以用一些零碎时间来读。实际上接手一个新任务,必须要做的就是理解需求。一个开发人员如何不理解他想做什么,基本上
这个任务一定会失败。我们高考时候都会写一篇大作文,对题目的理解非常重要,偏题跑题就没法拿到高分,开发也是如此。对需求的理解需要反复的进行,定期
和项目组领导或者客户进行沟通,以免自己做了无用功。但是沟通之前一定要注意,自己先掌握一定的背景知识,比如前面提到的规范文档,或者是读一读已经有
的代码,跑一跑成型的产品,免得问的都是不必要的问题。
搜索一下可以找到一篇题为”提问的智慧“的文章,里面介绍如何在网上问问题。其实项目组内沟通也是如此,要注意问有意义的问题。打个比方说,有时候自己
会有一种感觉,跑到别人面前,把问题说了一遍,还没等人回答,突然拍着脑袋说”啊我明白了“,也许是反应挺快,可是还是耽误了别人的功夫,像这样的问
题,自己组织组织语言或者写出来,答案就很容易发现。另外也有的人,总是这是怎么回事那是怎么回事,其实到搜索引擎一搜或者是把动手做做就知道结果,但
是非要张嘴问,这样的人说得难听点就是问题不经过大脑,其实一思考就能得到答案了。问问题之前也可以试着理清一下思路,看看前因后果,简化一下问题模
型,也许经过这些方式,自己就能找到答案。有同组的同事问问题,很多时间我反问几句,把思路理清,他自己就知道答案是什么了。忘记在哪有看到一个轶事,
在某个著名软件公司里,开发组的桌上会放着一只小熊,大家互相问问题之前,先对着小熊把问题说一遍,看能不能把问题描述的清晰,基本上说的比较有条理以
后,答案也就随之而来了,大家可以试试这个办法。
**注意事项三,提问之前,自己先试图看看能不能找到答案,我建议的寻找顺序是文档、google,最后才是张嘴问,问之前最好已经积累了一些材料,比
如关于这个问题自己做了什么研究,搜索了什么关键字等等,这样问的有诚意,回答才能有诚意。
另外,对于一个新人,需要多跟老同事沟通,了解项目的关键点是什么,比如开发一个通讯程序,用了什么协议,哪个网站比较有用,哪个文档需要精读,都是非
常有意义的问题,这些问题可以少走一些弯路。早上到了公司,第一件事是接收业务邮件,然后记下一些需要回复或者要做的工作。邮件阅读以后,可以跟项目组
长做个简单的沟通,了解一下哪个任务或者功能需要快一点完成,交流一下自己的想法,时间花费不多但是可以把一天的任务明确下来。
如果比较努力而且有一定的开发能力,两三个月以后应该开始接触到项目比较核心的东西了,这个时候需要做的工作就是读代码。一个项目最重要的东西就是代
码,至于文档、注释、测试,其实都是保证代码质量以及代码可维护型的一种辅助手段,作为一个开发人员,不熟悉代码就是致命的错误。
读代码我这里有一些简单的体会。
读代码要注意的第一条是从界面开始,深入到功能。打个比方说,一个桌面软件,其中有个格式转换功能,可以从菜单选择”格式转换“进行操作(注意,所谓格
式转换就是一个例子,没有实际意义),那么就可以搜索菜单里的”格式转换“,找到相对应的界面函数,这就是一个相对独立的功能入口点了。然后从这个入口
点顺藤摸瓜,就可以搞清楚格式转换这个功能需要的一系列界面函数以及逻辑实现函数。
读代码的时候注意要随时做笔记,可以用word或者是powerpoint这样的软件做记录,搭配一个抓屏软件抓取界面变化、程序运行栈或者是一些关键
数据就更好了。
一个相对独立的功能基本上是由几个数据类或者数据结构,加上几个比较重要的逻辑函数实现的,抓住了这些关键就抓住了这个功能的核心。比如说一个通讯软
件,重要的就是通讯数据格式和通讯协议实现。经过我的体验,这个小窍门还是很有用的。一般经常出现问题的也就是这些相对来说复杂一些的函数。
阅读代码的同时还要经常问自己一些问题,比如这个地方为何这样实现,有没有其他的方案,哪个方案更好一些等等。这些问题可以让自己更好的理解当时开发人
员的一些想法思路,另外也是将来代码进行重构的一个铺垫。
**注意事项四,作为一个开发人员,多思考是非常必要的一个特质。
一个新人,经过这些阶段,基本上可以成为项目组的中坚力量了,希望每个入行的新人都能成功晋级成为老手。

从2003年加入现在的公司,已经有了快6个年头,自己也从一个计算机软件开发方面的新兵变成了老人。在公司里也做过几个不同的项目,有一些新的同事加 入项目组,会有这样那样的疑惑和问题。在这里想简单说说,一个新人如何能快速的融入一个新的开发组,让其他同事能够接受自己。

首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读他妈的文档”,这是在新闻组或者论坛里可能常见的回复,一些人娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单问题,这些问题实际上都在项目文档或者软件规范里就明白写着。

一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有什么进展,领导看了还以为在磨洋工呢。

**注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉八九个大笔记本,里面写着项目开发的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。

如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。

阅读全文…

分类: 转载 标签: