不是天才,为什么还要努力?

一个世纪,在此之间诞生的天才是屡见不鲜.先撇开文学政治经济军事类的不谈,光是科学界的都多到我们眼球发花,啊也看不完.甚至你是用走马观花的姿势去浏览,也会觉得不只是"爱"就一个字,人呀,"多"也一个字.但是天才的数目多可是件好事.为什么好呢?因为显而易见嘛:他们推动了科学的发展,为我们一般的人额外支出了巨大的脑力.因为一些深层次的问题,不是你一般的人想学,从而解答,然后造福民众,这样看似顺理成章就能轻松完成.它需要很大的精力和时间,但是更重要的是有良好的IQ.那么不是天才的我们,为什么还要努力,努力的意义是不是也很深远呢?为了回答这个问题,下面我先谈谈那些天才到底"天"在哪里?

先看看数学家高斯的天分:

高斯是一对普通夫妇的儿子。他的母亲是一个贫穷石匠的女儿,虽然十分聪明,但却没有接受过教育,近似于文盲。在她成为高斯父亲的第二个妻子之前,她从事女佣工作。他的父亲曾做过园丁,工头,商人的助手和一个小保险公司的评估师。当高斯三岁时便能够纠正他父亲的借债帐目的事情,已经成为一个轶事流传至今。他曾说,他在麦仙翁堆上学会计算。能够在头脑中进行复杂的计算,是上帝赐予他一生的天赋。

高斯用很短的时间计算出了小学老师布置的任务:对自然数从1到100的求和。他所使用的方法是:对50对构造成和101的数列求和(1+100,2+99,3+98……),同时得到结果:5050。这一年,高斯9岁。

哥廷根大学当高斯12岁时,已经开始怀疑元素几何学中的基础证明。当他16岁时,预测在欧氏几何之外必然会产生一门完全不同的几何学。他导出了二项式定理的一般形式,将其成功的运用在无穷级数,并发展了数学分析的理论.19岁的时候他第一次用圆规构出了规则的17边型.

的确,有良好的数学头脑是高斯老妈给他的.天就天在这,然而对数学的兴趣是使高斯发扬天才之能的后天条件~于是,你还是得相信努力是有意义的.不能因为你脑力有限,而放弃有兴趣但是却很艰辛的工作.

我们大多数人,活在世间,努力都不是为了自己的兴趣.由于世界的飞速发展,时空的不停变换,导致了人们在意识形态上发生了很大的演化.于是,以后的生活都朝着被社会定调了的方向前进,远离了当初在大人面前说出理想时的你.没错,有时侯我们要现实点.比如一个很有能力的青年,在物资条件上遇到了困难,而放弃他的理想,是情有可原的.但是,这一个放弃,或许成就了他另一个人生.他可能凭着他的良好天分,在商场牟了大利,于是官场也逐步参与,入戏接着编剧,最后情场也得意.这个人生看来他会很满意,但是人民群众呢?满意吗?这得看他是不是好商,是否是个好官,他老婆呢?那就看他是个好男人吗.但是我想说,这个年代好商难做,好官不用说了,至于好男人嘛哈哈~~我笑了!

于是,我们可以想见,天才的诞生很容易,只要有好的大脑就行了,可是最后服务人民的天才出来的容易吗?这个很难呀,就好比让习惯开宝马接MM的老板换成用拖拉机去拉客一样,难于上青天.

近代的天才也蛮多的.比如我的偶像:爱因斯坦和霍金,都是物理界的大牌民星.他们的成就是巨大的.前者史无前例的提出了经典的狭义和广义相对论.后者在量子引力论,黑洞理论,和宇宙起源论上的贡献是怎能用三言两语打发了的.当然能做出这翻成就,和人生努力是分不开的.

现在网络发达了,很多有为青年也开始努力了.他们在圈内被称为(奋青),于是每天除了上班或学习,吃饭,约会外他们的努力都用在了网络上.你一言,我一语的讨论得很有气愤,还一边感叹着这电子电脑可不是一般的好,是相当的呀.因为有了它们,骂人可以不用见面,一来少了口水相溅的不卫生,二来少了由口角纠缠导致的肉搏,以及由此衍生的通常的两种可能:进医院或派出所.这时候,他们真实为民的奋斗在现实社会中我们难以寻觅,只能常常看着博客中的风云四起,骂断这方群僚的祖宗后又说抡起斧头要砍你.我欲唤回鲁迅亡灵来和他们说理,又恐他也成了奋青的头领.

总之,人嘛呀总要努力呀,先为自己,再为家人,最后为别人是这个时代的口号~~哈哈,但是人不能老是这样,有时把他人放前,会更有意义,当然会不会有好的待遇,那得看运气和看你咯~~~

Read: 1778

影响照片锐度的15个要素

有读者问:“我用普通35mm底片拍摄,能放大到20英寸吗?”能!因为经过几十年的不断研发,35mm胶卷的工艺极其成熟,不过根据业内专家介绍,实际上它的潜力仍然很大,如果方法适当,放大到20英寸以上毫无问题。

获得高锐度照片,锐度其实不是惟一因素。很多读者将锐度和分辨率混为一谈,其实,决定照片锐度的关键是分辨率而非锐度,而衡量分辨率以线对/毫米(line-pairs per millimeter,有时标注为pmm)为标准。人眼并不能分辨物体的细节本身,而是通过分辨细节的边缘来判定其锐度,因此很多人将高锐度的照片误以为高分辨率的照片,其实这是人眼观察和分辨物体的特点带来的认识误区———数码照片属于高锐度、低分辨率影像,而传统胶卷则是高分辨率、低锐度影像,很多读者认为数码照片分辨率高,正是这种误区的具体体现。顺带提及的是,光学中锐度的英文是“acutance”而非大多数媒体所用的“sharpness”。

回头再看35mm胶卷,由于其画幅很小,因此从拍摄到冲洗以至放大,容不得一点技术上的瑕疵,幸亏由于长时间使用,关于这方面的经验已经十分丰富,读者所要做的就是“知之、行之”。涉及照片锐度的主要包括镜头、胶卷和个人技术等三大方面共15个问题。

1.三脚架 很多摄影技术文章都建议摄影者重视使用三脚架,没有一个要素对影像质量有这么大的影响。但如果使用三脚架,一定要使用高质量的三脚架,不要打“用便宜的三脚架替代高档三脚架”的如意算盘。性能价格比很高的三脚架,每条腿都可以独立打开,而且重量合理、使用方便。有了优质的三脚架,还要有与之相配的云台,不仅应该能够快速装卸,而且可以适用于各种拍摄题材。国外的摄影师往往选择有“三脚架中的卡迪拉克”之称的捷信三脚架,而云台则选择瑞士阿卡照相机工厂生产的球形云台,它不仅能快速装卸,而且质量极为可靠,其加工工艺十分精良,绝对物有所值。使用三脚架时,最好只升到必要的高度,除非万不得已,升起中柱都是最后的选择。另外在刮风的天气里,三脚架的高度越低越好,或者使用重物加固三脚架。

不要被灿烂的阳光所迷惑,必须牢记手持摄影的基本规则:快门速度使用镜头焦距的倒数———即使是心脏的每次跳动,血液在身体里的流动都会导致手震。大多数摄影者都不认为心跳会对成像质量产生什么影响,不过根据有关的测算,脉搏会导致大约0.2毫米的位移,因此快门速度至少不能低于1/10秒。假如您使用的是一只高质量的镜头,其分辨能力为100 lpm,如果使用1/250秒快门速度手持摄影,即使0.2毫米的位移,也会导致其分辨能力降至78 1pm,损失大约22%的分辨能力;若是将快门速度进一步改为1/60秒,分辨率仅为30 1pm。因此,不要相信用60mm尼克尔微距镜头、以1/60秒快门速度手持摄影能够拍摄出足以放大到10英寸以上的照片。记住:使用三脚架是保证成像锐度的必要条件。

2.快门速度 三脚架不可能保证被摄主体不动,即使是拍摄山脉这样的风光题材,也不能忽视风吹叶动这样的问题,一旦这种移动与相机颤动以及其他因素叠加到一起,就会危及成像锐度。需要指出的是,如果您使用变焦镜头拍摄———比如一只70-200mm镜头,手动模式或快门先决模式下为70mm端时设定的最佳快门速度,如果快速变焦到200mm端时可能就忘记提高快门速度了,这时手震的影响急遽加大,会大大影响照片的锐度。

3.快门线 不要以为将相机装到三脚架上就一劳永逸了,要知道按快门的动作不论怎么轻盈,也能引发震动,使用快门线或自拍功能能够最大限度地减小机震问题。

4.对焦精度 有一个极为重要、却往往被忽视的问题:有些戴眼镜的摄影者会发现,戴不戴眼睛时的对焦精度相差很大。您用的是哪种对焦屏?有不少摄影者习惯于使用普通磨砂对焦屏,这种对焦屏适合于水平线较多的场合,但是对焦精度比裂像-微棱镜对焦屏差多了,如果你需要经常使用手动对焦,最好还是使用裂像-微棱镜对焦屏,以便摄影者的视觉可以在1-2秒内分辨出是否精确合焦。

5.使用最佳光圈 一只镜头各个光圈的分辨率相差很大,有时差一二级光圈,锐度就犹如天壤之别,不过事情并不总是这样,若是像f8和f11这样的“最佳光圈”,其分辨率和锐度都十分接近。有时,用f16和f22这样的光圈拍摄,景深很大,给人感觉锐度很大,其实由于衍射问题的影响,分辨率反而会下降。

6.衍射 衍射是一种很怪异的光学现象,当光线通过光圈时,靠近光圈叶片边缘的光线会产生偏移———这就是衍射,而接近光轴的光线则笔直地会聚到焦点上。如果光圈很小,那么衍射现象会变得十分严重。通常,便宜的镜头和光学设计做得较差,衍射问题就更为明显了。很多镜头在f22到f32时,分辨率比f16会下降很多。

7.镜头 买你能买得起的最贵的镜头!这已经是老生常谈了,但很多摄影者仍然做不到这一点。不过目前,很多镜头生产厂商借助超级计算机已经推导出了先进的光学公式,获得了极佳的光学设计,而且这些镜头的成像锐度非常高,却便宜得唾手可得,无论是光学结构、耐用性和可靠性都非常出色。相比之下,一只昂贵的专业镜头并不仅仅是大光圈这一点,如果你用慢速胶卷或使用低感光度设置拍摄,或者遇到其他极端的环境,才能体会出专业镜头在成像锐度上的优势。(未完待续)

来源:中国摄影家协会

Read: 614

[转]不要爱上一个黑客

和他在一起是第38天了,漫长的日子仿佛一瞬间而已。
我坐在电脑这头,他在网络另一头回应我的呼喊。我想这样是完美的,至少我们都可以给对方最多的幻想,让彼此有时间和空间去幻想对方的好,忽略一切不美好的事情。这就是网络的魅力。我是要感激吗?
是的,我爱上了个黑客。

先解释为什么我非要爱黑客不可呢?我很喜欢电脑,虽然我是学法律的,在法律的圈子里我找到的是官场和政治的束缚,我要自由确无处可找。于是我宁愿要电脑不要老公。认识我的朋友全部都知道。那么要想两全其美就只可能找个精通计算机的老公。就这么简单的原因。

遇见他,是幸运还是老天爷的玩笑?

他深私一湖不可见底的池水,你永远猜不透他在做什么。

今天你还在学习旁注,可是他已经开始看脱壳的教程了,好不容易会一点点脱壳的东西,他又开始研究什么木马。我不管多么努力,永远都是在他身后追逐。

有时候我觉得我很幸福,圣诞节的时候他会做个世界上独一无二的程序给你,上面写着你的名字……说明我也是他的独一无二;然后我有不明白的问题他会给我做个动画让我明白;还有我永远忘不了他邀请我到他电脑里面捣乱,他就静静地看着,什么也不说,什么也不做,就这样看着,任凭你象个小孩子般乱翻他的文件。他也会很宠我,尽管我已经千百次给自己说“他忙的时候别和他聊天”,可是忍不住打扰他了,他却在第一时间回复我;还有他忙过了会陪我打泡泡,我们一起打,两个人菜得可以,他也不厌其烦地陪我打,尽管他不是很喜欢泡泡,当你不小心中招了,他突然停止一切活动,只是看着你,不忍心“杀”死我;还有,我写的每一篇文章他都会去看,我说的每一句话他都记得,我的每个小小要求他都记在心中,我的每次任性他都纵容了;他有10个QB的话会记得给我9个;他知道我睡觉前没听他说“晚安”就不安稳,所以他夜夜和我说晚安;他会记得经常检查我BLOG的漏洞,然后立刻补好,也会帮我备份;我要的任何软件刚说出口他就立刻给我传过来;在2004年最后一秒2005年第一秒他会亲昵地对我说“新年快乐”;我这里下第一场雪的时候他会陪我一起开心;即使一个问题我问了N次,他也会尽量耐心地再次给我解释;我想要恶作剧的时候你总是第一个支持我的人;我唠叨的时候你总是静静听我说……

可是爱你是很辛苦的事情你知道吗?有时候我在想你要是个普通男人该有多好?我们都不会电脑,都不让自己的生活腻在电脑面前,然后我们的每一天都不是从打开电脑开始,那有多好啊?这样也许我们可以笑看初雪,临窗听雨……我们不用说那么多不属于我们两个人的话题。现在想想,我们聊的话题除了电脑外,没别的另我们兴奋了。我们是在和彼此恋爱,不是电脑不是吗?经常你就研究我永远也不明白的木马好多天,究竟木马是你的恋人还是我?我是木马就好了,这样你花在我身上的心思也会比较多啊……你爱我吗?你说爱的时候是真心的吗?你有梦见过我吗?看不见我的时候你会想念我吗?你记得我喜欢吃的东西吗?你想知道我在做什么吗?为什么你的问题那么少?为什么你就不愿意和我将心掏出来好好聊聊呢?我爱你,即使你不是黑客,即使你缺鼻子少眼,我还是不可自拔地爱你啊!我不愿意你只是一时冲动就和我在一起,我怕伤害你,更怕被你伤害啊!是我们彼此太尊重彼此了吗?是我们彼此太珍惜对方了吗?以至于让我本来很坚定很明亮的心开始模糊了!

是的,和一个黑客谈恋爱。要做好以下心理准备:

1.可能你永远追不上他的速度。所以你要比任何女人都努力。你起码要会一样他最不拿手的东西。如果他不擅长编程,那么这个就是你要奋斗的目标。怎么说呢?我曾经学垃圾VF的时候写的程序冗长又复杂,在学习VB的时候写的程序自己都不知道在弄什么,简直可以说是乱七八糟。但是你还是要拼命学,因为说不定哪天他对编程感兴趣的时候你就有话说了。

2.你不仅要会计算机,还要会一个女人应该会的全部知识。他会很忙,忙到不知道怎么照顾你,所以你要学煮饭,会理家,最好是做个全能的女人。照顾他是你必须的,谁叫你爱他?他也许睡觉的时候不安稳,所以你要做好以后半夜起床给他盖被子的心理准备。他也许忙得忘记吃饭,那么你要练习怎么给小孩子喂饭,是的,你今后还要给他一口一口喂他。

3.你要懂得什么叫安静。你要知道,一个在电脑前工作的男人是很讨厌被人打断思维的那种感觉。你永远不要指望他在第一时间给你回复,他连吃饭都可以忘记,更何况你说的话呢?当然,他也许记得你说的话,可是他不会说“我知道了”,得到一句“恩”已经是奇迹了。我的经历是他收到了留言就立刻给我做好我想要的事情,但是他不会给你说“我做好了”,于是你必须自己再去看他究竟有没有做。总之,你不要在他工作的时候和他聊天,更不要成天给他说垃圾话题,什么“今天你开心吗?”“你爱我吗?”他没有时间回答的。他爱你也不会成天说,建议当他说爱你的时候拿软件录音,然后想问他的时候放给自己听。还有,他如果10分钟之内没有回你的问题那么他一定是忙,不想自讨苦吃就别去继续打扰他。

4.和他恋爱是很寂寞的事情。我从来没有想过以后和他牵手逛街,没有想过和他到国外过圣诞节,没有想过和他去看大海。他宁愿坐在电脑前对着屏幕发呆也不愿意和你出门。你真要爱他的话最好就找姐妹去逛街吧。还有,以后开同学会的时候尽量找个周围有网吧的地方,这样他和你的朋友见面之后就可以去上网。否则他会觉得你在浪费他的时间。你不开心的时候最好自己解决,别去烦他,他忙,可能他正在和一个顽固的网站斗争,他正一肚子火,没精力处理你的问题。

5.最好放弃美容。相信我,要想爱他又美容是不可能的。通常黑客在半夜活动。什么10点睡美容觉就忍了吧,他总是习惯在凌晨2点给你说“晚安”,如果想得到他的祝福那么就准备一罐咖啡,然后再准备一本最好是《追忆似水年华》那样的书,一边看一边等待吧。如果他真的2点都没有给你回应,那么最好你立刻准备点夜宵的陪他通宵。我最近没哪天是2点前睡觉的。

6.等待是家常便饭。是的,你想问他个问题吗?你想和他谈心吗?好的,请耐心等待,运气好的话他很快就闲下来,运气不好就几天的样子吧。还好,我的问题都是当天解决的。还有,交代他的事情他不会第一时间完成的,除非他当时确实没有事情做。然后你要等着和他结婚?好的,有你等的,等他完成自己的梦想再说吧。

7.你看着他就好了。相信我,他凝视电脑的时间永远比注视你的时间多。那些“你看我今天有没有什么变化”的愚蠢问题千万不要问。他可能注意到今天XX病毒出变种了,XX程序有新漏洞了,可是你别想他注意到你换了个新发型。他是工作狂人,你要体贴他,更别生气地说“你看着我的眼睛”,你的眼睛或许永远没有木马有魅力。

8.随时做好被冷落的准备。他可能一天也不会和你说半句话,恩,是的,还是那个来原因,他忙啊。

9.学习好最基本的计算机常识。不会拿最简单的WEBSHELL就别和他恋爱了。他可能更有兴趣对你说他今天是怎么成功黑了一个站点,如果你觉得无聊那么最好尽快和他分手.你要百分百爱计算机,我相信没有黑客GG愿意接受一个讨厌计算机的女生,你们在一起是个错误,今天不分手明天也会分手的。

10.甜言蜜语永远由你来说。好的,他是个语言大师——计算机语言,你没有发现他和计算机对话的时间长过和你对话的时间吗?他爱你或许不知道怎么表达,一句“我爱你”就够了,真的,这是他全部感情的表达,你要体谅他的词穷,更或许他会做个你用不来的程序讨你的欢喜,你不懂不要紧,你不开心也别表现出来,你想想,他能花时间给你做个东东出来已经说明他把你放在很重要的位置了,不是吗?你不开心也要装作很开心,说“老公,你好好哦,我爱你”你不懂也没关系,就说“哇!做得好棒啊!真有意思啊!”

我觉得至少你要做到以上10点,我一直把以上10点铭记在心,每天我尽量这样去做。明白吗?再寂寞也不要哭泣,因为你爱他啊!你爱这个男人,就请无条件付出……

Read: 654

[转]爱情? 是浪费时间吗?

回想自己做人的这三十多年,不禁悲从中来,爱情是么子东东?耗费了自己多少宝贵的光阴。到头来,似乎恍然大悟,又好似一无所获。

最恨暗恋,心里抵死地幻想,脸上却不敢流露一丝一毫,把青春岁月最宝贵的时间、感情用在一个无谓的人身上,而那个人竟然毫不知情,到最后竟与你一点关系也没有,而且如果有机会睇清楚,这个人竟然和所有人一样,既不美好也不高尚,根本不值得你化费那么多心思,浪费了大好青春!

更恨爱了又分开,干嘛呢、干嘛呢?像吃饱了撑的!像火车交汇处一样,交汇的一刹那就是永远的分开,渐行渐远,可是你为那一刹那跋涉了多少辛苦的路程,为那一刹那的分开流了多少不舍的泪!可是爱过的人以后跟你的生活也是一点也不搭边儿,真真耗费了你的辛苦、泪水和长长的旅程。就这样浪费了半辈子!

爱了结婚又如何?恋爱时美丽如天仙的人,婚后两人披头散发、又吼又叫,把自己最丑陋的一面暴露出来,真是耗费了婚前那许多的心思、装扮和美好的情感!接下来的生活是有儿有女有牵挂,有人扯着你不让你死得那么痛快,你就这样成了爸爸、妈妈,然后又成了爷爷、奶奶,就这样浪费一辈子!

总之,爱情就是浪费!不仅浪费时间和生命,还浪费金钱和感情,更是浪费精力、体力和脑力!

感情丰富的人是大傻冒,一次次激情投入、一次次把自己烧成灰烬,一次次的浪费,极大的浪费!

情商不高的人是真聪明,因为浪费得比别人少,有先见之明。

不爱不婚不嫁的人是真正觉悟的圣人,是大智慧,因为绝不浪费,把时间精力用于济世救人做大事。

可是我辈不是圣人,超脱不了做人的局限性,思想、行动都不能自由地来往天地间,除了吃喝拉撒睡,爱让人活得有梦想、有幻觉、有错觉、有折磨,让你欲罢不能,恋爱结婚生儿育女,在通往天堂与地狱之间,人在地面停留的时间太长,这样有事可干,这样厮磨着把一生渡过,所以爱情是上帝把人套牢的一个伎俩。

Read: 808

【转】浅谈Object Pascal的指针

大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说 指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人 产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今 的Object Pascal,可以说在指针运用上,丝毫不会逊色于C语言的指针。

以下内容分为八个部分,分别是
一、类型指针的定义
二、无类型指针的定义
三、指针的解除引用
四、取地址(指针赋值)
五、指针运算
六、动态内存分配
七、字符数组的运算
八、函数指针

一、类型指针的定义。对于指向特定类型的指针,在C中是这样定义的:
int *ptr;
char *ptr;
与之等价的Object Pascal是如何定义的呢?
var
ptr : ^Integer;
ptr : ^char;
其实也就是符号的差别而已。

二、无类型指针的定义。C中有void *类型,也就是可以指向任何类型数据的指针。Object Pascal为其定义了一个专门的类型:Pointer。于是,
ptr : Pointer;
就与C中的
void *ptr;
等价了。

三、指针的解除引用。要解除指针引用(即取出指针所指区域的值),C 的语法是 (*ptr),Object Pascal则是 ptr^。

四、取地址(指针赋值)。取某对象的地址并将其赋值给指针变量,C 的语法是
ptr = &Object;
Object Pascal 则是
ptr := @Object;
也只是符号的差别而已。

五、指针运算。在C中,可以对指针进行移动的运算,如:
char a[20];
char *ptr=a;
ptr++;
ptr+=2;
当执行ptr++;时,编译器会产生让ptr前进sizeof(char)步长的代码,之后,ptr将指向a[1]。ptr+=2;这句使得ptr前进两 个sizeof(char)大小的步长。同样,我们来看一下Object Pascal中如何实现:
var
a : array [1..20] of Char;
ptr : PChar; //PChar 可以看作 ^Char
begin
ptr := @a;
Inc(ptr); // 这句等价于 C 的 ptr++;
Inc(ptr, 2); //这句等价于 C 的 ptr+=2;
end;

六、动态内存分配。C中,使用malloc()库函数分配内存,free()函数释放内存。如这样的代码:
int *ptr, *ptr2;
int i;
ptr = (int*) malloc(sizeof(int) * 20);
ptr2 = ptr;
for (i=0; i<20; i++){
*ptr = i;
ptr++;
}
free(ptr2);
Object Pascal中,动态分配内存的函数是GetMem(),与之对应的释放函数为FreeMem()(传统Pascal中获取内存的函数是New()和 Dispose(),但New()只能获得对象的单个实体的内存大小,无法取得连续的存放多个对象的内存块)。因此,与上面那段C的代码等价的 Object Pascal的代码为:
var ptr, ptr2 : ^integer;
i : integer;
begin
GetMem(ptr, sizeof(integer) * 20);
//这句等价于C的 ptr = (int*) malloc(sizeof(int) * 20);
ptr2 := ptr; //保留原始指针位置
for i := 0 to 19 do
begin
ptr^ := i;
Inc(ptr);
end;
FreeMem(ptr2);
end;
对 于以上这个例子(无论是C版本的,还是Object Pascal版本的),都要注意一个问题,就是分配内存的单位是字节(BYTE),因此在使用GetMem时,其第二个参数如果想当然的写成 20,那么就会出问题了(内存访问越界)。因为GetMem(ptr, 20);实际只分配了20个字节的内存空间,而一个整形的大小是四个字节,那么访问第五个之后的所有元素都是非法的了(对于malloc()的参数同 样)。

七、字符数组的运算。C语言中,是没有字符串类型的,因此,字符串都是用字符数组来实现,于是也有一套str打头的库函数以进行字符数组的运算,如以下代码:
char str[15];
char *pstr;
strcpy(str, "teststr");
strcat(str, "_testok");
pstr = (char*) malloc(sizeof(char) * 15);
strcpy(pstr, str);
printf(pstr);
free(pstr);
而 在Object Pascal中,有了String类型,因此可以很方便的对字符串进行各种运算。但是,有时我们的Pascal代码需要与C的代码交互(比如:用 Object Pascal的代码调用C写的DLL或者用Object Pascal写的DLL准备允许用C写客户端的代码)的话,就不能使用String类型了,而必须使用两种语言通用的字符数组。其实,Object Pascal提供了完全相似C的一整套字符数组的运算函数,以上那段代码的Object Pascal版本是这样的:
var str : array [1..15] of char;
pstr : PChar; //Pchar 也就是 ^Char
begin
StrCopy(@str, ‘teststr’); //在C中,数组的名称可以直接作为数组首地址指针来用
//但Pascal不是这样的,因此 str前要加上取地址的运算符
StrCat(@str, ‘_testok’);
GetMem(pstr, sizeof(char) * 15);
StrCopy(pstr, @str);
Write(pstr);
FreeMem(pstr);
end;

八、函数指针。在动态调用DLL中的函数时,就会用到函数指针。假设用C写的一段代码如下:
typedef int (*PVFN)(int); //定义函数指针类型
int main()
{
HMODULE hModule = LoadLibrary("test.dll");
PVFN pvfn = NULL;
pvfn = (PVFN) GetProcAddress(hModule, "Function1");
pvfn(2);
FreeLibrary(hModule);
}
就我个人感觉来说,C语言中定义函数指针类型的typedef代码的语法有些晦涩,而同样的代码在Object Pascal中却非常易懂:
type PVFN = Function (para : Integer) : Integer;
var
fn : PVFN;
//也可以直接在此处定义,如:fn : function (para:Integer):Integer;
hm : HMODULE;
begin
hm := LoadLibrary(‘test.dll’);
fn := GetProcAddress(hm, ‘Function1’);
fn(2);
FreeLibrary(hm);
end;

Read: 862