`
andrew913
  • 浏览: 188818 次
  • 性别: 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语言问题》

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

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

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

    用C语言编的地震合成记录

    下面我们将详细探讨这个主题涉及的几个关键知识点: 1. C语言:C语言是一种广泛应用的编程语言,以其高效、简洁和灵活著称。在科学计算和系统编程中,C语言因其底层控制能力而备受青睐。用于编写地震合成记录的代码...

    外部事件记录仪(内含完整的C语言代码)

    C语言代码通常分为几个关键部分:输入/输出处理、数据结构定义、事件处理逻辑以及文件操作等。 1. 输入/输出处理:外部事件记录仪需要能够接收来自硬件传感器或其他外部设备的事件信号。这通常通过中断服务例程实现...

    C语言几个经典案例

    以下是对标题“C语言几个经典案例”及描述中涉及的知识点的详细说明: 1. **学生信息管理系统**: 这个系统通常用于存储、管理和查询学生的个人信息,如姓名、学号、年龄、成绩等。在C语言中实现,需要掌握文件...

    一个简单的C语言聊天服务器

    【标题】中的“一个简单的C语言聊天服务器”指的是使用C语言编写的一个基本的网络通信程序,它能够提供聊天服务,让多个用户通过网络进行实时交流。这类服务器通常基于TCP/IP协议,利用套接字(socket)编程来实现...

    C语言实现的学生个人消费管理系统.zip

    总结来说,这个C语言实现的学生个人消费管理系统是一个典型的结构化编程实践,它涵盖了数据结构、文件操作、函数调用、用户交互和错误处理等多个关键知识点。通过实际的项目开发,不仅可以巩固C语言的基础,还能提升...

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

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

    C语言简单的图书管理系统

    通过以上分析,我们可以看到,这个C语言的图书管理系统是一个综合性的项目,涵盖了C语言的核心特性,如数据结构、文件操作、流程控制和错误处理。对于学习C语言的初学者来说,这是一个很好的实践项目,可以提升对...

    实现键盘记录 C语言实现 vc编译代码

    综上所述,实现一个C语言的键盘记录器涉及了C语言编程、Windows API调用、钩子机制理解、内核驱动开发和调试技术等多个方面。通过分析和学习这些源代码,我们可以深入理解系统级别的输入捕获原理,提升自己的系统...

    简易C语言词法分析程序

    这个程序可能包含以下几个主要部分: 1. 输入处理:程序通常从标准输入或文件读取源代码,然后将其存储在一个字符数组中。 2. Token定义:定义每种类型的Token,并给出相应的正则表达式或模式。 3. 主循环:遍历...

    汽车加油行驶问题(C语言算法设计与分析)

    - 使用C语言,代码可能包含以下几个部分:数据结构定义(如定义加油站结构体),主函数,动态规划函数,输入处理和输出展示。 - 主函数负责读取输入(加油站位置和油量),调用动态规划函数,并打印结果。 - 动态...

    C语言 几个常见题的可应用程序

    这里我们探讨的几个题目都是基于C语言的典型算法问题,它们分别是:完数判断、上楼梯问题、换硬币问题、哥德巴赫猜想的编程实现以及打印图形和搬砖头问题。 1. **完数**: 完数是指一个正整数,其所有真因数(除了...

    几个C语言课程设计实例

    以下是对"几个C语言课程设计实例"这个主题的详细解析。 一、C语言基础 C语言以其简洁、高效和强大的底层控制能力著称。它的基本结构包括变量声明、数据类型(如int, float, char等)、运算符(算术、比较、逻辑等)...

    C语言简单计算器+实验报告.rar

    程序代码通常会包含以下几个部分: 1. 输入处理:程序需要接收用户的输入,这通常通过标准输入(stdin)实现。用户输入的数字和运算符会被解析并存储到适当的数据结构中。 2. 运算符处理:C语言提供了丰富的运算符...

    C语言键盘记录程序

    本知识点主要聚焦于一个C语言编写的键盘记录程序,它能够捕获用户的键盘输入,并将其保存到TXT文本文件中。 键盘记录程序,也称为键logger,是一种特殊类型的软件,用于记录用户在计算机上输入的所有字符。这种程序...

    简单c语言编译器代码

    它主要由以下几个部分组成:预处理器、词法分析器(扫描器)、语法分析器(解析器)、语义分析器、代码生成器和优化器。本段代码展示了词法分析器、语法分析器和代码生成器的部分实现。 ### 词法分析器(Lexer) ...

    数据记录数据记录数据记录数据记录数据记录

    在"C"语言中,数据记录通常涉及到以下几个关键知识点: 1. **数据结构**:C语言提供了多种数据结构,如数组、结构体、链表等,用于组织和存储数据。例如,你可以创建一个结构体来表示一条记录,其中包含多个字段,...

    c语言简单的学习题目

    根据给定的文件信息,我们可以提炼出与C语言学习相关的几个关键知识点,这些知识点对于初学者来说至关重要,有助于他们更好地理解和掌握C语言的基础与实践应用。 ### 1. 结构体(Struct)与数据存储 在C语言中,...

    C语言带简单图形界面的N皇后问题

    在这个项目中,我们用C语言实现了N皇后问题,并为其设计了一个简单的图形用户界面。 首先,让我们来理解N皇后问题的解决方案。该问题的基本策略是采用回溯法,即在每个位置尝试放置皇后,如果发现冲突,则回溯到上...

Global site tag (gtag.js) - Google Analytics