C语言那点事儿~

软件和网站开发以及相关技术探讨
头像
YeLee
论坛版主
帖子: 26388
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
送出感谢: 25 次
接收感谢: 307 次
联系:

Re: C语言那点事儿~

#16

帖子 YeLee » 2013-05-19 14:52

最终男猪脚是不是和他深爱的男人性福地生活在一起了啊? :em04 :em04 :em04
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#17

帖子 懒蜗牛Gentoo » 2013-05-20 22:03

正在这时,宿舍里另外两人回来了。听到图笨笨他们讨论编译器的问题,先走进来的温豆豆同学立刻说开了:“编译器呀?那就得用VS2008,强大啊!”
那厮很不屑的横了他一眼:“人家笨笨同学问的是‘编~译~器~’拜托。”
“或者SourceInsight也不错,不过不如vs强大,不能F5,要F5还得回vs。”
“大哥……你到底知不知道啥叫编译器……”
“难道你想推荐Eclipse?Java的东西就别拿出来晒了,效率太低。”
“好吧,我表示沉默。”
这时候跟着温豆豆进来的麦塔金同学插了进来:“编译器,最重要的是,要有品位。找一款有品位的编译器才能写出有品位的代码来。”
“那你推荐一个?”图笨笨说。
“Xcode用的编译器就不错,命令行下也很强大,虽然我忘了他叫什么名字……”
“哎,夸了半天连名字都没记住”李那厮说,“叫做gcc!”
“恩对,就是这么个优雅的名字。”麦塔金赶紧补充。

争论了半天,图笨笨还是没搞清楚到底编译器是啥,他终于没有选择李那厮和麦塔金说的gcc,也没有安装温豆豆力挺的vs,而是找到了一个叫做tcc的轻巧的小编译器。主要是因为下载起来很快,体积很小,他觉得作为一名初学者,这应该就够了。
这些用户感谢了作者 懒蜗牛Gentoo 于这个帖子:
qq2wul (2013-06-20 18:36)
评价: 3.7%
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
kuerck
帖子: 62
注册时间: 2011-08-24 17:47
送出感谢: 1 次
接收感谢: 0

Re: C语言那点事儿~

#18

帖子 kuerck » 2013-05-22 1:38

先下记好。。。。

Sent from my MI-ONE using Tapatalk 2
个人博客http://www.ckrn.net
个人论坛http://www.xkshare.com

代码: 全选

Hello  ubuntu & Android!
[/color]
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#19

帖子 懒蜗牛Gentoo » 2013-05-25 22:09

有了一个简陋的编译器了,之后图笨笨开始仔细打量着这个经典的、短小的C程序——HelloWorld.

代码: 全选

#include<stdlib.h>

int main(int argc, char* argv[]) {
        printf("Hello World!\n");
        retrun 0;
}
虽然看着没几个字母,不过多少还是有点摸不着头脑,所幸一旁的李那厮同学很热情的过来讲解开了:
“你看啊,首先呢,作为C语言,一定要有一个main函数。”
“为什么啊?”
“废话!要不程序怎么知道该从哪开始运行啊?”
“从第一行开始运行呗……”图笨笨弱弱的说。
“一看你就是个写脚本的命,有品位的C语言,就一定要有个main函数,然后程序从main函数开始执行!”
旁边坐在自己床上的麦塔金同学插话道:“对,写代码要有品位,要优雅,否则就是个码农。”
“好吧”图笨笨无奈道,“那还没说什么叫函数呢”
“我靠,函数你都不知道。就这个,用大括号括起来这种就叫函数。”那厮指着main函数的大括号说。
“听说if也用大括号括起来……”
“废话!我知道”
“那你说啥叫函数……”
“我是说,大括号括起来,前面还有个名字的这种!这个名字就叫‘函数名’。”
“struct也有名字……”
“废话!我知道!前面还一int呢!struct前面有int么?”
“struct里面有int……有多少都行”
“废话!我说的是前面,前面!”
“前面没int就不叫函数了?”
“废话!!我知道!前面不一定非得int,什么类型都行!!”
“那到底啥叫函数嘛……”
这是,麦塔金同学悠悠的说了仨字:“子~程~序~”
图笨笨顿悟:“哦,明白了!”
李那厮倒在自己吐出的血泊中……
麦塔金同学合上了自己的笔记本,从床上跳下来,走过来对着地上的李那厮同学说:“你不知道他学过basic么。”
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#20

帖子 懒蜗牛Gentoo » 2013-05-25 22:50

说的这么热闹,折腾了这么半天,那到底什么是函数呢?
C语言,一种面向过程的编程语言。它的每一行代码,我们叫做一条语句(不绝对,有的一行可以有很多条语句,有的一行没有语句),整个程序的作用是告诉电脑去干某一件事情,实现某一种功能。要做成这件事情,具体的作法就是一条条的语句,先干什么,后干什么,再干什么这样。把这些零碎的小的步骤总结在一起,成为一个大的动作,并且给这个大动作起个名字,这就叫做函数。
举个例子吧。比如说生活中,我们要摊鸡蛋。如果要让一只四肢健全头脑发达但是没有任何地球生活经验的外星人来做,我们就要给他写出详细的操作步骤。那可能就得这么写:。
轻轻拿起桌面上一头大一头小的近似椭圆状的物体。
拿出一个碗
把椭圆状物体向碗边撞击,以撞击后,椭圆状物体外壳部分破裂为宜。
双手(假设他们也有两只手吧)分别持椭圆状物体两侧,讲椭圆状物体悬停在碗的上空。
双手由破裂处讲椭圆状物体外壳撕开,使其中的半液态物体落入碗中。
……

后面肯定还有很多,我们就不慢慢写了。上面的这5行就相当于C语言中的5条语句。那么我们总结了一下,这五句话完成了一件什么事呢?就是往碗里打了个鸡蛋。那么我们就可以吧上面这5句话(5条语句)总结成一句话(一个函数),叫做“往碗里打一个鸡蛋”。以后无论在哪里,再要执行这几步操作的时候,就不用再写的这么罗嗦了,就只要写“往碗里打一个鸡蛋”就行了。这句“往碗里打一个鸡蛋”就相当于函数名。(我觉得还可以再写点,不过我困了,先睡觉……)
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
送出感谢: 5 次
接收感谢: 13 次
联系:

Re: C语言那点事儿~

#21

帖子 tangboyun » 2013-05-28 16:38

图片
请参考结对编程实践指导
http://www.oschina.net/news/40760/pair-programming
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#22

帖子 懒蜗牛Gentoo » 2013-05-28 16:54

:em20 :em20 :em20 :em20 :em20
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#23

帖子 懒蜗牛Gentoo » 2013-06-04 22:04

代码: 全选

#include<stdlib.h>

int main(int argc, char* argv[]) {
        printf("Hello World!\n");
        retrun 0;
}
图笨笨同学总算是知道了什么是函数了,就是把一系列的指令集合在一起,起个名字,方便以后调用。这样的一个指令集合体,就叫函数。那么这个短小精悍的HelloWorld程序中,定义了唯一的一个函数,这个函数叫做main,这个函数又有什么特殊性呢?这个main函数,在c语言中是一个特殊的函数,他的特殊就在于,他叫main……(纯属废话)

好,简单的说吧。我们知道了函数就是一小撮指令的集合。然后,一个程序就是一大堆指令,这一大堆指令分成一小撮一小撮的函数。现在这个程序摆在这里了,里面有一大堆指令,当我们想运行这个程序的时候,问题就来了——这一大堆指令里,应该从哪条开始执行啊?写C程序可不是小学生写作文,有开头、中间、结尾。事件的起因、经过、结果啥的。代码的书写顺序不完全代表执行顺序。而这个main函数,就是用来制定整个程序的入口。一个C语言写的程序一定要有一个、而且只有一个main函数。这个函数就是运行这个程序时第一个执行的函数。

那我们再回头看这个HelloWorld程序,程序从main函数开始执行,也就是执行里面的printf("Hello World!\n");这一行。这一行其实是在调用另一个叫做printf的函数,而这个函数的作用就是往屏幕上打印字符。这个函数还有很多好说的东西,我们以后慢慢讲,这里先小小剧透一点:1.这是一个标准C函数库中的函数。 2.这个函数的参数个数,竟然是TM的可变的……
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#24

帖子 懒蜗牛Gentoo » 2013-06-17 22:04

“Coding的世界,如江湖险恶。这Coding的江湖中,有着许多的门派。我们呢,用的是C语言,正如少林正宗,乃武学泰斗之位。我大C语言流派,乃是Coding之祖脉,IT之苗根。”
这不是天桥的郭德纲在说书,这是李那厮同学在给图笨笨讲C……
“话说各门各派都有其独到的武功,或者特有的法宝。我们武林正宗Coding泰斗大C语言流派呢,拥有其他任何流派都不具有的独门武功”
“是啥?”
“指针!”
“指针是个啥?钟表上那个?”
“不是,指针呢,是一种C语言里特有的变量类型,有了它,可以直接对内存中的数据进行访问,能够做到很多其他语言不能做到的事情!”
“不明觉厉……”
“啥意思?”
“不明白你在说什么,不过觉得挺厉害。”
“好吧,我会让你明白的。首先,你知道,C语言里有各种类型的变量是吧。”
“恩,知道了一些。比如int,就是整数,char就是字符,float就是浮点型之类的。”
“对,这些都是基本的数据类型。但你知道这些类型的数据在内存里都是怎么放着的么?”
“这个……我就不知道了”

“恩,谅你也不知道,好,听我慢慢的道来。首先呢,我们改改你那个HelloWorld程序”说着,那厮大笔一挥——呃不对,应该是大键盘一挥,或者,一顿乱敲,总之,很快就写出了一个小程序:

代码: 全选

#include<stdlib.h>

int main(int argc, char* argv[]) {
         int	a=3;
         char 	b=’1’;
        printf("Hello World!There is a integer number %d, and a char %c\n",a,b);
        retrun 0;
}
“好,比如这个小程序。里面用到了两个变量,分别叫做a和b。程序里申请了这两个变量,那么程序运行的时候,就会为这两个变量分配相应的内存空间。比如a,这是一个int型,也就是整数型。那么在大多数平台上面,他是一个32位的数据,也就是占4个字节的内存空间。而变量b,是一个char型,也就是字符型,一般只占1字节的空间。比如我们计算机里的内存是这个样子的:
屏幕快照 2013-06-17 下午10.03.18.png
屏幕快照 2013-06-17 下午10.03.18.png (8.25 KiB) 查看 8809 次
每一个 格子代表一个字节的存储空间,那么变量a和b在内存里可能就是这样放的:
屏幕快照 2013-06-17 下午10.03.55.png
屏幕快照 2013-06-17 下午10.03.55.png (10 KiB) 查看 8809 次

前面那个00000003存放的就是变量a,后面那个31就是变量b(字符‘1’的ASCII码的16进制)。当程序中需要用到变量a的时候,就会从前4个格子里去取数据,当用到变量b的时候,就会到第一排第6个格子里取数据。当然计算机不会用“第一排第六个”这么土的叫法去访问内存,而是使用地址。
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
xujc
帖子: 680
注册时间: 2009-12-06 15:04
送出感谢: 14 次
接收感谢: 2 次

Re: C语言那点事儿~

#25

帖子 xujc » 2013-06-18 16:22

写的不错啊 :em05 :em05
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#26

帖子 懒蜗牛Gentoo » 2013-06-18 22:02

每一个字节的内存空间都有一个地址,就像是你家门牌号一样。当然,内存里的地址并不是什么什么路,哪个小区,多少号这样的。内存地址就是一个标号,一个数字,一般我们喜欢用16进制来表示。如果有地址的概念了,那么刚才那两个变量在内存里的样子大约就是这样:
屏幕快照 2013-06-18 下午10.02.11.png
表上面的0x4380之类的就是地址。这里咱就用2个字节的地址来表示,明白这个意思就行。其实如果是32位系统的话,地址应该是4个字节才对,如果是64位的系统,那就是8个字节的地址。
那么回到这个小程序上来。程序里声明了”int a=3”,就是说声明一个整数型的变量,叫做a。其实计算机是不关心你管变量叫什么的,爱叫什么叫什么,你声明个变量叫“苍井空”也没人管你。声明了变量,计算机就会在内存里给这个变量开辟一块空间,比如就是从地址0x4380开始的4字节的空间……”
“那个……”正当那厮同学讲的津津有味的时候,图笨笨打断了他,“我们好像说要讲指针来着?”
“恩,快到了,快到了。”
“该吃饭了”
“还没说指针呢。”
“指针已经指向食堂了”图笨笨指了指桌上的表。
“吃饭重要还是指针重要?”
“吃饭!”
“你就一吃货的命!走,边吃边讲。”
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
phoenixlzx
帖子: 2245
注册时间: 2009-07-29 20:11
系统: Arch Linux
来自: Gensokyo
送出感谢: 4 次
接收感谢: 17 次
联系:

Re: C语言那点事儿~

#27

帖子 phoenixlzx » 2013-06-19 8:25

卧槽蜗牛又开始写小说了?

大赞啊!
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#28

帖子 懒蜗牛Gentoo » 2013-06-19 9:07

欢迎大家常来哦~ :em05
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
送出感谢: 9 次
接收感谢: 70 次
联系:

Re: C语言那点事儿~

#29

帖子 zhw2101024 » 2013-06-19 11:55

mark之,紧追不放。太有趣了,争取再出一本C语言的书!
头像
懒蜗牛Gentoo
论坛版主
帖子: 7312
注册时间: 2007-03-02 17:36
送出感谢: 0
接收感谢: 96 次

Re: C语言那点事儿~

#30

帖子 懒蜗牛Gentoo » 2013-06-22 22:00

菜足饭饱之后,图笨笨和李那厮向教学楼走去。下午要上的是计算机原理,对于图笨笨来说基本就是催眠课。(关键还是在下午,刚吃饱饭的时候上)到了教室,俩人抬头一看,看到麦塔金同学早就来了,课桌上打开放着他那台比杂志厚不了多少的笔记本电脑,他正在快速的敲键盘,似乎正在写着什么。他右手边,用鼠标、u盘、3G网卡,分别占了三个座位。图笨笨过来坐在了离麦塔金最近的“鼠标”位置上,问他:“你在写什么?”
“一个小程序,写着玩。”
“哇塞!好厉害~这是什么语言呀?就是C么?”
“不,这是C++”
“哇塞!好好厉害~~C++是什么……”
“也是一种编程语言,可以认为是新一代的C语言吧。”
“那跟C有什么不一样?也有int和char么??”
“C++是一种面向对象的编程语言。”
“什么?对象?”图笨笨脸略微有点红
“恩,怎么说呢……”
正这时,李那厮已经坐在了“u盘”位置上,并积极插话道:“面向对象,就是像C++,Java这样的语言。他们有‘对象’的概念。一个对象就是一个……恩……一个东西,一个对象可以有成员,简单理解就是属于这个对象的变量。还可以有方法,简单理解就是属于这个对象的函数。”
“哦,那到底啥是面向对象?不面向对象的语言能面向啥?面向老丈人?”
麦塔金说:“其实,面向对象是一种思维方式。早期的编程语言都是面向过程,比如C语言。面向过程的思维方式考虑问题的时候是把要做的一整件是,分成第一步,第二步,第三步……然后在逐步细分,第一步里面先干什么,在干什么,然后干什么,第二步先干什么,在干什么,这样。而面向对象的思维方式,则是从问题出发,将整个系统划分成一个一个的个体,再考虑每个个体之间的连带关系,然后细化每一个个体,最终使整个系统运行起来解决问题。”
“不明觉厉……”
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
回复

回到 “软件/网站开发”