记录几个简单的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.

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值