论坛首页 编程语言技术论坛

记录几个简单的C语言问题

浏览 1310 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-29  
C

最近身边找工作的人多,经济危机,工作难找啊,听说很多公司把校园招聘改为社招了,希望情况快点好起来,我明年这个时候还要找工作呢!不过身边一个兄弟短短两个星期就拿了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.

 

 

 

 

 

 

 

 

 

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics