锁定老帖子 主题:记录几个简单的C语言问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-29
最近身边找工作的人多,经济危机,工作难找啊,听说很多公司把校园招聘改为社招了,希望情况快点好起来,我明年这个时候还要找工作呢!不过身边一个兄弟短短两个星期就拿了qq和迅雷两家个公司的offer,年薪至少10W以上吧,羡慕中。。。。。
回归正题,记录最近学习到的几个很基础的问题,以增加记录:
1.const char 的问题 我们在linux 的内核函数中经常用const char * 比如:int open(const char*pathname,flags,int perms) 很多时候并不理解为什么要这样用,感觉不用const 好像也行,呵呵,其实这里用了const会大大增加程序的可读性和健壮性。 比如 这个const就告诉了调用者,open这个函数是绝对不会改变实际传进来的参数的,也禁止了函数去改变这个实参数。
顺便再讲几个相关的知识点
有些经常喜欢写
char *p = "i'm hungry!"; p[0]= 'I';
其实这里的"i'm hungry!",是一个常量,它总是被放在内存的只读空间,所以是不能通过p[0]= 'I';来改变它的。
还有一些const放的位置不同也会带来实际意义的不同,比如 char * const person; char const * person;
很显然这两个有着本质的却别。
2.关于0空间char型的应用
经常会在程序种看到
char para[0];//不占用空间的变量
这种形式在数据结构中的设计非常有用,举个简单的例子
现在要设计一个person的结构体 这个结构体里面有name age等简单成员变量,同时它也有学校等这些复杂的成员,假设各个学校区别太大,可能不能用一个 school这样的结构体来定义 ,或许每个学校都需要设计一个对应的结构体。这时候我们只需要在person的结构体的结尾放一个char para[0];
typedef struct person { int age; ...... char para[0];//指向学校 }person_t; 这样设计的话,不管这个人拥有什么学校的结构体都没关系,只要在申请空间的时候一起申请就行了。而para就指向了这个学校的结构体.这样就可以大大增加程序的扩展性。当然这里也可以用list_head 这个结构是来实现。list_head也是一种非常优秀的设计方法,具体请见linux/list.h这个文件。
linux的源码看多了,其实很多地方都体现oo的方法,有时候用面向过程的语言写面向oo的程序真是一种享受,可惜我还没那个能力,55555555555.
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1310 次