`
andrew913
  • 浏览: 187431 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 

 

 

 

 

 

 

 

 

 

2
0
分享到:
评论

相关推荐

    你必须知道的495个C语言问题(PDF)

    难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...

    你必须知道的495个C语言问题

    然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明...

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...

    C语言常见几中图形打印代码

    关于C语言的入门学习记录如下: 现已经历过几个步骤:从简单的了解操作平台Xcode开始,到熟悉基本的数据类型:整型:int、long、short;...下面利用循环结构实现了几个C语言入门的小实例,并且写出了自己的分析。

    嵌入式linux C语言的几个要点

    本人接触嵌入式linux C语言不久,这是学习的几点笔记,记录的是一些数据、运算符、表达式的重点。

    C语言FAQ 常见问题列表

    难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...

    记录C语言学习中的代码.rar

    对于C语言,要记住的东西不多,只有几个常见语句和一些关键字,您看到的数千甚至数万行代码都是用这些语句和关键字反复编写的,然而,它们的逻辑功能却大为不同,如何快速学习C语言必须背诵100个代码。建议多读多写...

    记录学习完C语言后,学习C++的过程,实现从C语言到C++的过渡 使用的IDE是QT.rar

    C和C++的区别: C语言可以在C++编译器上完美运行,...因为上述代码有几个C独有的特点: 第1行:#include 第5行:scanf("%d",&n) 第13行:printf("%lld %lld\n",m,sum); 这三点也是C和C++最基本的区别,下面看C++版本:

    C语言通讯录

    指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2. 编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 ...

    :c语言通讯录管理系统

    指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2. 编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 ...

    上海电机学院C语言实训答案

    实训报告内容包括以下几个方面:  程序的总体设计和算法分析。  程序流程图、函数说明  源程序代码清单  测试数据和测试过程记录  遇到的问题及解决方法分析  实训小结 4. 程序运行方式 构建一个简易...

    C语言入门经典(第4版)--源代码及课后练习答案

    1.5 剖析一个简单的程序 6 1.5.1 注释 6 1.5.2 预处理指令 7 1.5.3 定义main()函数 7 1.5.4 关键字 8 1.5.5 函数体 8 1.5.6 输出信息 9 1.5.7 参数 10 1.5.8 控制符 10 1.6 用C语言开发程序 12 1.6.1 ...

    1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年的问题。

    2.编写一个函数print, 打印一个学生的成绩数组, 该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。 3.有10个学生,每个学生的数据包括学号、姓名、3...

    谭浩强C语言设计第三版.pdf

     2.3.1 几个概念  2.3.2 数据类型的隐式转换  2.3.3 数据类型的显式转换  2.4 数据的控制台输入与输出  2.4.1 格式化输出函数pIintf()  2.4.2 格式化输入函数scanf()  2.4.3 字符输入/输出函数getchar()与...

    嵌入式web服务器boa_C语言/Python + HTML + javascript + ajax 代码实例例子

    几个重要配置参数如下: DocumentRoot: 存放html文档的主目录; DirectoryIndex: 默认返回的html文档; ScriptAlias:cgi脚本虚拟路径对应的实际路径,/www/cgi-bin/为cgi脚本存放的实际路径; 其他配置选项的意义...

    考勤管理系统C语言课程设计.doc

    详细设计 5 4.1数据结构设计 5 4.2模块接口设计 6 4.3 以下是几个主要模块的流程图: 6 5.运行结果 9 5.1主菜单界面: 10 5.2信息录入界面: 11 5.3信息浏览界面: 12 5.4 信息查询界面: 14 5.5信息修改界面: 15 6...

    ccf门禁系统c语言答案

     输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定  1≤n≤1,000,读者的编号为不超过n的正整数。

    c语言经典案例

    实例001 第一个C语言程序 2 实例002 一个完整的C语言程序 2 实例003 输出名言 3 实例004 用TC 2.0打开文件 4 实例005 计算正方形的周长 5 第2章 简单的C程序 6 实例006 输出一个正方形 7 实例007 输出一个三角形 8 ...

Global site tag (gtag.js) - Google Analytics