阅读《C程序员——从校园到职场》笔记

——最近和小伙伴交流,发觉自己的C语言在很多方面需要进一步提升或加强,于是借阅了CSDN大佬编的这么一本书,希望有所改变和提升。

第一章 概述
本章主要内容:介绍C语言历史与现况以及开发工具。
要点一:C语言之父——Dennis Ritchie(丹尼斯·里奇);

第二章 学校到职场
本章主要内容:破除“学生”观念,介绍“职场”思维。
要点一: 四个错误观念:
1.我的C语言学得很好;
2.编程是很简单的事情;
3.我只要把代码写好就行了,其他的就不用管了;
4.公司会安排好我的职业道路。
要点二:培养各种能力的方法:
1.多实践,多动手,多问为什么;
2.多参加活动,利用假期去外面做兼职;
3.打好专业基础,争取去实习。
摘引一:但是,当你发现坐在你旁边的员工已经入职10年,可是还在做着和你一样的工作时,你对公司美好的幻想瞬间破灭了。确实,不管是在学校,还是在工作单位,我们不能指望学校或公司能够将未来的道路给安排好,而是靠自己不断地努力去实现自身的价值。
摘引二:如何才能既学到技术,又不感觉到枯燥呢?根据我个人的经验,可以参考图:


阅读《C程序员——从校园到职场》笔记_第1张图片

第三章 程序的样式
本章主要内容:介绍程序的大体样式规范化,包括头文件、源文件、空格、空行、大括号还有注释等。
要点一:头文件样式如下:

/*************************************************************************
*	版权所有  (C)2018,公司(或个人)名称。
*  
*  文件名称:
*  内容摘要:
*  其他说明:
*  当前版本:
*  文件作者:
*  完成日期:
*
*  修改记录:
*************************************************************************/

#ifndef  _XXX_H
#define _XXX_H

/*********************************相关宏定义****************************/

/********************************相关结构体定义*************************/

/**************************源程序中出现的函数声明***********************/


#endif // _XXX_H

要点二:源文件样式如下:

/*************************************************************************
*	版权所有  (C)2018,公司(或个人)名称。
*
*  文件名称:
*  内容摘要:
*  其他说明:
*  当前版本:
*  文件作者:
*  完成日期:
*
*  修改记录:
*************************************************************************/

/********************************头文件引用*****************************/

/********************************全局变量定义***************************/

/********************************函数实现*******************************/

要点三:函数头部注释:

/*************************************************************************
*  功能描述:
*  输入参数:
*  输出参数:
*  返回的值:
*  其他说明:
*  修改日期-----------版本号---------------修改人------------------修改内容
*  YYYYMMDD-------XXX------------------Name---------------------YYY
*************************************************************************/

要点四:在关键字(if、for、while、switch等)后要留空格,函数名后不留,函数参数留(如:Function(x, y, z);),各类二元操作符前后都应当加空格,一元操作符(!、~、++、–、&等)前后不加。
要点五:善用大括号可以美化样式,大括号用在初始化数组或结构体变量、各类判断语句、函数中分隔相关性不大的代码块、突出或说明修改的代码块,如下:

//修改或添加的代码块开始
{
	//修改或添加的代码
}
//修改或添加的代码块结束

第四章 变量和函数
本章主要内容:变量和函数的命名,静态变量的使用。
要点一:对整形与字符型进行重定义,如下:

typedef unsigned short int UINT16;
typedef signed short int INT16;
typedef unsigned int UINT32;
typedef signed int INT32;
typedef unsigned long ULONG;
typedef signed long LONG;
typedef unsigned char UINT8;
typedef signed char INT8;

要点二:变量命名应该使用名词,如fResult,f表示这是一个浮点型变量;函数命名应该使用“命令性”动词,如ProcessFactorial。函数的功能要单一,规模小,不要设计多用途函数。对于有返回值的函数,不要直接调用该函数,需要定义一个变量表示函数的返回值。
要点三:静态变量的使用。该变量使用static关键字进行声明,具有“记忆性”的特点,即每次函数调用的该变量都是上一次函数执行结束时的值,有一个重要功能就是用来生成序列号,每一次调用都可以生成与之前不同的数值(记忆性)。

第五章 内存操作
本章主要内容:四组与内存操作相关的函数:memset和memcpy,strcat和strncat,strcpy和strncpy,strcmp和strncmp。

要点一:memset和memcpy。memset的函数原型为“void *memset(void *dest, int c, size_t count);”,即将已开辟的内存空间dest的前count个字节的值改为c。如memset(szTestStr, ‘B’, 5);表示为调用memset函数将szTestStr指针后五个字节的内容改为B。memcpy的函数原型为“void *memcpy(void *dest, const void *src, size_t count);”,即从src的前count个字节复制到dest上。如memcpy(szTestStr+1, szCopyStr+5, 3);,即将szCopyStr往后5个之后数3个复制到szTestStr从第二个数的三个。两个函数经常同时使用,先用memset来初始化数组或结构体变量,然后用memcpy将内容复制到被初始化的变量。

要点二:strcat和strncat。strcat的作用是连接两个字符数组中的字符串。原型为:char *strcat( char *strDestination, const char *strSource );。函数将后者拼接到前者后面,并返回前者,当拼接字符串长度大于前者数组长度时会出现错误,应在使用前进行对比检查,也可以使用strncat。strncat的参数比strcat多了一个size_t count,可以用来指定拼接的字符多少,这样会使程序更安全,一般推荐使用strncat。

要点三:strcpy和strncpy。作用是将一个字符数组中的字符串复制到另外一个字符数组中。大体和上相同。

要点四:strcmp和strncmp。作用是进行字符串比较,如果前者大于后者返回值大于0,如果前者等于后者返回0,如果前者小于后者返回值小于0。返回值类型为int,strncmp只比较两个字符串前count个字符。

第六章 文件
本章主要内容:对常用的文件操作函数、配置文件和Makefile文件进行介绍。
要点一: fopen函数,FILE *fopen(const char *path, const char *mode);,path包含文件路径与文件名,mode代表流形态。文件顺利打开返回文件指针,没有则返回NULL,一般打开操作后都要对函数返回值进行判断,保证打开操作运行正常。
要点二:fgetc函数,int fgetc(FILE *stream);,作用是从文件中读一个字符将其返回,若到达文件尾则返回EOF。
要点三:fgets函数,char *fgets(char *s, int size, FILE *stream);,作用是从文件读一行或者size-1个字符到s中并自动加上NULL作为字符串结尾。若成功执行则返回s,不成功返回NULL。(一般size大小与初始化的s大小一样)
要点四:fflush函数,int fflush(FILE stream);,作用是更新缓冲区,将缓冲区数据写入到文件。成功返回0,失败返回EOF。
要点五:fputs函数,int fputs(int c, FILE
stream);,将c转化为UINT8后写入文件,成功返回c,失败返回EOF。
要点六:fputs函数,int fputs(const char *s, FILE *stream);,将s所指的字符串写入文件,成功返回写入的字符个数,失败返回EOF。
要点七:fread函数,size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);,作用是从文件里读nmemb个字符数到ptr中,返回实际读到的数目。
要点八:fwrite函数,size_t fwrite(const void ptr, size_t size, size_t nmemb, FILE * stream);,作用是将ptr指向想要写入的数据的地址,总共写入字符数以sizenmumb来决定,返回实际写入的数目。
要点九:ftell函数,long ftell(FILE *stream);,作用是得到文件位置指针所在的当前位置相对于文件首偏移的字节数。一般用于得到文件大小。
要点十:feof函数,int feof(FILE *stream);,作用是判断是否读到文件尾,当为尾时返回0,不是尾时返回非零值。
要点十一:fclose函数,void fclose(FILE *stream);,操作结束后要关闭文件句柄。

第七章 指针和结构体
本章主要内容:介绍指针和结构体。
要点一:数组中所有的数据都是同一种类型,结构体(structure)可以存放不同类型,允许用户自己建立由不同类型数据组成的结合性数据结构。

……

你可能感兴趣的:(C语言)