C语言那点事儿~

软件和网站开发以及相关技术探讨
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: C语言那点事儿~

#61

帖子 ubuntu777 » 2015-02-28 20:44

:em02 真的是蜗牛速度。近一年时间。讲到了long是8个字节。我记得有一本书叫七天学习会C语言,还是一个月。
我想和楼主一起写一个汇编语言。刚好到春天了。脑子化冻期。可能会有兴趣写。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#62

帖子 懒蜗牛Gentoo » 2015-02-28 21:47

ubuntu777 写了::em02 真的是蜗牛速度。近一年时间。讲到了long是8个字节。我记得有一本书叫七天学习会C语言,还是一个月。
我想和楼主一起写一个汇编语言。刚好到春天了。脑子化冻期。可能会有兴趣写。
好啊,正好汇编我不是很懂,可以作为很好的学习机会 :em01
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#63

帖子 懒蜗牛Gentoo » 2015-02-28 22:15

(上文书说道图笨笨在网络上找到一位请教内存堆栈的问题,这位牛人的ID叫FreeBSD)
FreeBSD:栈是由操作系统管理的空间,堆是软件自己管理的。栈是连续的空间,堆就不一定了。一般局部变量,以及函数的调用参数都放在栈上。malloc之类的函数申请的空间是在堆上。
tutbnt(这是图笨笨在论坛的ID):还望大神详加指点
FreeBSD:内存这个东西呢,很宝贵的。
tutbnt:知道,一条4G的200多块。
FreeBSD:一般我们的计算机上呢,是有操作系统的。
tutbnt:恩。
FreeBSD:计算机的资源都是由操作系统来管理的,内存也不例外。
tutbnt:哦……
FreeBSD:操作系统会用某种方式去管理内存,记录着内存空间中哪里是空闲的,哪里是已用的,已用的部分是被那个程序用的。
tutbnt:某种方式?什么方式?
FreeBSD:这个比较复杂,不同的系统,使用的方式也不尽相同。最简单的方式,比如可以用链表的形式,把所有空闲块作为链表的表项串联起来。比如这样:
屏幕快照 2015-02-28 下午10.13.52.png
tutbnt:哦……你画的挺好看的,你学美术的吧?
 FreeBSD:-_-||
tutbnt:大神继续。
FreeBSD:当一个程序,或者说二进制文件、ExE文件运行的时候,操作系统首先会根据这个程序的大小,计算出加载这个程序所需要的内存大小。然后从所有空闲的空间中找出一块比较合适的来,把要执行的程序,从硬盘复制到内存里。一个程序加载的时候需要的内存大概有两部分:程序代码和变量。
tutbnt:哦,就两部分,不算多,好记。
FreeBSD:嘻嘻,看似简单哦。你知道程序代码是指什么?
tutbnt:比如我写的printf(“HelloWorld!\n”)?
FreeBSD:恩,差不多吧,不过编译好的程序在内存里肯定不会存着这样的c语言源码,他们已经编译成了机器码了。
tutbnt:哦,没有printf了啊,我就看它眼熟呢。
FreeBSD:可见你除了HelloWorld没写过啥有意思的玩意-_-b
tutbnt:那么,程序代码,就是C语言的程序编译后的机器码咯,这些东西要放到内存里。
FreeBSD:是的。
tutbnt:为什么?
FreeBSD:厄……?
tutbnt:为什么非要放到内存里?不能在硬盘里执行么?
FreeBSD:当然不能了。
tutbnt:为什么不能呢?
FreeBSD:这个……好像……因为硬盘太慢吧?
tutbnt:SSD的硬盘很快啊。
FreeBSD:那虽然是快点,但是……厄……也……不如内存快吧……(大概吧)
tutbnt:好吧,等我回去好好学习一下再来问你这个问题。
FreeBSD:好(这家伙终于放弃问这个奇怪的问题了)
tutbnt:那继续说内存的问题,一部分是程序代码,这个我理解了。另一部分是变量?
FreeBSD:是的,另一部分,就是你的程序里声明的所有全局变量。
tutbnt:只有全局变量?
FreeBSD:是的,只有全局变量。
tutbnt:没有局部变量?
FreeBSD:是的
tutbnt:为什么?
FreeBSD:又来了……
tutbnt:局部变量也得有空间啊
FreeBSD:有的,会有的,一会咱们再说。
tutbnt:好吧。
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#64

帖子 懒蜗牛Gentoo » 2015-03-03 22:11

tutbnt:局部变量也得有空间啊
FreeBSD:有的,会有的,一会咱们再说。
tutbnt:好吧,那你继续说全局变量吧,说吧,快点说吧。
FreeBSD:恩……
tutbnt:快点说啊,我都等不及了。
FreeBSD:厄……-_-b,让你这么一说,好像也没啥说的了。就是程序编译的时候就会给全局变量规划好空间,程序运行的时候,操作系统就会分配出相应的空间来存储它的全局变量。
tutbnt:说完了?
FreeBSD:恩……完了。
tutbnt:那赶紧说局部变量吧。
FreeBSD:好……吧。局部变量的特点是,其生命周期只在一个函数内。进入函数时变量才生效,函数退出后变量就没用了。
tutbnt:恩……是哦,还真是这么回事。
FreeBSD:废话。
tutbnt:那局部变量也得有空间啊,也得开空间存内存里啊。
FreeBSD:我知道,你怎么这么话唠。局部变量由于是动态的,所以在栈上为其分配空间。栈的特点你知道吧,就是先入后出。
tutbnt:不知道
FreeBSD:你怎么连这个都不知道!就是早高峰挤地铁知道啊了吗?最后进来的下一站最先被挤出去!最先进来的被挤到里面不到终点想出都出不来!!
tutbnt:哦,顿悟!
FreeBSD:哎……急死我了。好吧,局部变量和函数的参数都作为栈上的数据在进入函数的时候被压栈。函数退出的时候就被弹出。
tutbnt:又完啦?
FreeBSD:完了。
tutbnt:那堆是什么?
FreeBSD:形象的说,就是一堆内存空间扔在那,需要用的时候去跟系统申请,系统分给你用。
tutbnt:就跟食堂打饭似的?
FreeBSD:哈哈,你说的还真有点像。程序通过malloc等函数,向系统申请一定大小的内存空间。
tutbnt:就像我通过嘴喊手比划等方式,向食堂卖饭的申请一定量的米饭。
FreeBSD:然后系统根据申请的内存空间大小,在当前系统中所有的剩余空闲空间里,找一块合适的,分配给该程序。
tutbnt:然后大师傅根据我的饭量,在饭锅里所有的米饭中,挖出一坨大小合适的,盛给我。
FreeBSD:然后程序获得这块空间的所有权,并且使用,也就是往里写数据或读数据。
tutbnt:恩,就像我获得这陀米饭的所有权,并且使用,也就是吃了他们。
FreeBSD:但程序要在使用后主动释放这块内存,如果用完了不释放会造成内存泄露。
tutbnt:是啊,我吃完了这坨米饭,使用后,吸收完,得……厄……释放……就是说……恩……
FreeBSD:-_-||
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#65

帖子 懒蜗牛Gentoo » 2015-03-07 18:15

自己顶一下,这周写点啥呢……
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: C语言那点事儿~

#66

帖子 ubuntu777 » 2015-03-08 14:28

:em04 蜗牛加油!
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#67

帖子 懒蜗牛Gentoo » 2015-03-17 22:08

当图笨笨结束了和高人的交流,并且准备离开的时候,发现整个图书馆“网吧”里,只剩下孤零零的他,和角落里的一位戴着眼镜,看似学霸的妹妹在那里笑的梨花乱颤。哎,学霸也得有点自己的娱乐时间啊。图笨笨看了看表,发现竟然已经11点了,赶紧回宿舍吧。

当图笨笨走在了从图书馆通向6号宿舍楼的路上时,他忽然想起了一个逻辑性很强的问题:

代码: 全选

	if (time > 11:00) {
		宿舍楼关门();
	}
或者更详细点描述为:

代码: 全选

	while (11:00 < time < 5:00) {
		if (回宿舍) {
			被骂();
			扣分();
			进屋睡觉();
		} else {
			露宿街头?();
		}
	}
转念一想……刚才组在角落的那个学霸妹应该也遇到了和我一样的问题哦。是不是学霸有些什么更好的解决方案呢?去问问吧。于是,图笨笨转身往回走,当走到图书馆门口的时候,远远看到有个娇小的身影向另一个不同的方向走去(女生宿舍的方向),图笨笨紧走两步赶过去
“同学——”
夜黑,风高。
“同学——”
小路,树荫。
“同学你等一下。”
四外寂静无人,只有一个孤单的女生,和一条从后面跟上来的,长长的黑影……
图笨笨扯着嗓子用最大的声音喊:“同学~~”(是不是她耳朵不好听不见啊?我得大声点)
只见图笨笨运足丹田一粒混元气,扎稳马步,大喝一声:“同学!!!”
碰~~~~
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#68

帖子 懒蜗牛Gentoo » 2015-03-29 21:51

连续加了半个月的班,智力都快没了…… :em20 :em20
不知道这周加不加
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: C语言那点事儿~

#69

帖子 月下叹逍遥 » 2015-03-29 22:00

这周休息了一下,重新编译贱兔玩玩 :em06
浮生七十今三十,从此凄惶未可知
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: C语言那点事儿~

#70

帖子 月下叹逍遥 » 2015-03-29 22:01

这周休息了一下,重新编译贱兔玩玩 :em06
浮生七十今三十,从此凄惶未可知
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#71

帖子 懒蜗牛Gentoo » 2015-05-31 21:26

年中啦~ 更新啦~~~

图笨笨和学霸妹坐在图书馆门前的台阶上
月光散落,星星依稀可见。
学霸妹双颊微红,深深的低着头。
图笨笨左脸紫红,使劲的捂着腮。
学霸妹羞涩的说:“你看,你刚才早说明白多好啊,害得我一路找砖头。”
图笨笨揉着脸说:“恭喜你最后成功了哈。”
“还真是……有点不好意思”
“没事,一回生二回熟。”
“你的意思是再来个二回?”
“厄……就当我没说吧。”
“说起来……还没有回答你的问题呢。”
“对呀,你打算怎么回宿舍啊。这么晚了,回去不会被管理员骂么?”
“嘻嘻,不会啊,我的宿舍没有管理员。”
“哦?管理员病了?”
“不是”
“那是……?”
“我家就住学校的家属区,就在女生宿舍后边那块。”
“厄……好吧,我做了这么大牺牲换来的竟然是这么个答案。”
“嘻嘻,那看你一个人无家可归挺可怜的,不如……”
“不如什么?”图笨笨的小心脏多彭彭了两百几十下。
“不如我陪你再坐会吧。”
“好啊……”之后,图笨笨的小心脏在静谧中独奏了27秒。
“对了”,图笨笨终于找到了小心脏独奏曲的休止符:“你也是计院的么?”
学霸美望了望远处那块刚刚用过的砖头,叹了口气说:“我是计~算~机~学~院~的。”
“太好了,我也是计院的!”图笨笨显然没有想明白对方为什么要用全称。
“你刚才在干什么呢?这么入迷,是不是在打游戏?”,学霸妹显然比图笨笨会找话题。
“不是,我在聊天。”
“哦?女朋友?”
“呵呵,不是啦。我哪有女朋友。是和一个高人请教堆栈的问题,我想问清楚,什么是堆,什么是栈。”
“哦?”学霸妹略带吃惊,似乎觉得计院的人不该不懂这个:“就聊什么是堆,哪个叫栈?!”
“恩,是不是觉得问题很弱智啊。呵呵”图笨笨似乎感觉到了学霸妹嘴角那一丝嘲讽的微笑。
“也不是啦,有时候其实这样的基本问题最难以回答。比如,至今为止,然们也不是很明白燃烧到底是怎么回事,只是能够粗浅的理解为一种剧烈的氧化反应。”恩,妹子,还是你会聊天。

“那,你刚才在干什么呢?”
“我嘛……我在玩一个非常有意思的游戏。”
“哦?什么游戏?”
“国际象棋”
“我还以为是什么有意思的东西”
“和电脑哦!”
“那就更没意思了啊?”
“是电脑和电脑玩哦!!”
“那就更更是纯属无聊了啊!你看着两个AI在下国际象棋??!!”
“对!”
“这有意思?”
“有!”
“为什么?”
“因为其中一个AI是我写的”
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: C语言那点事儿~

#72

帖子 月下叹逍遥 » 2015-05-31 22:56

学长学妹图书馆,这是早h的节奏么

来自我的 MI 2S 上的 Tapatalk
浮生七十今三十,从此凄惶未可知
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#73

帖子 懒蜗牛Gentoo » 2015-09-16 22:26

《国际象棋AI挑战赛》
规则:
1.主办方提供服务器及基本API接口,包括基本的获取棋盘棋子数据,落子等。参赛者自行编写程序实现AI算法,在规定的时间连接到服务器(通过sokeckt接口),与对方AI对弈,服务器端将依国际象棋规则判断胜负。
2.比赛分为初赛、复赛、半决赛、决赛四个阶段。初赛和复赛阶段,选手完全通过网络报名参赛,进入半决赛的选手必须现场实名认证。选手可在非比赛时间随时升级优化AI程序。
3.比赛只比胜负,不计算AI的思考时间。但一方落子后,另一方5分钟之内必须做出回应,否则认为断线判输。
4.获得前三名的选手必须提供程序源码以保证程序的原创性。
5.如出现平局,进行加赛。
==============================================================
“你还别说,这事还是挺有意思。”李那厮看了之后说道。
“是吧是吧~”图笨笨很兴奋,“咱们搞这个玩吧!”
“你?”那厮表示了怀疑,“你知道Socket是什么么?”
“不知道”
“你知道怎么写AI么?”
“不知道”
“你是不是连冒泡算法都不知道?”
“对,不知道。”
“那你知道什么?”
“我知道这挺好玩的,而且,我们还有半年的时间。我可以慢慢学”
“恩……好吧,看在你这么执着的分上。那么,你想从哪开始学?”
“先说说上回没说完的指针吧……”
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
ebhrz
帖子: 40
注册时间: 2008-08-16 20:56

Re: C语言那点事儿~

#74

帖子 ebhrz » 2016-01-04 12:55

n年没上论坛了,一上就看见蜗牛开新书而且又太监了 哈哈哈哈,新的一年继续催更
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: C语言那点事儿~

#75

帖子 懒蜗牛Gentoo » 2016-01-04 20:25

为什么要说又……
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
回复