C和指针(一)基础

注释
1,C是自由格式的语言,没有规则要求怎样书写语句,但是遵守约定可以使代码清晰更易阅读。
2,/*和*/成对使用,不能嵌套。
3,需要注释整块代码尽量使用#if…#endif方式,其他注释方式如果代码中存在其他注释时不一定能注释掉整块代码。

预处理指令
1,头文件包含和宏命令属于预处理指令,由预处理器解释。
2,预处理器根据预处理指令对源代码进行修改,修改后的源代码由编绎器编绎。
3,预处理器用函数头文件内容替换文件包含语句,在单独头文件里声明共同的头文件包含,用于不同源文件,可避免重复声明。
4,预处理器将宏定义进行简单字符替换,不进行类型检查。
5,预处理器将注释替换为空格。

函数原型
1,函数原型告诉编绎器源文件中定义函数的特征,当函数调用时,编绎器进行准确性检查。
2,函数原型中参数名称非必需。
3,函数声明与定义的参数个数和类型以及返回值需要完全匹配,否则编绎器报错。

函数
1,每个C程序必须有一个main函数,它是程序执行的起点。
2,在C程序中,标量和常量按值传递,在函数内部对标量参数的任何修改在函数返回后丢失,数组参数以引用形式传递,即地址调用,修改数组参数中的元素函数返回后不会丢失。
3,所有传递给函数的参数都是按值传递的,数组名作为实参实际传递的是数组的起始地址,函数可以按照指针的方式操作实参。
4,函数的数组参数,需要单独传递一个参数告知数组长度,根据传递长度操作一维数组。

标准库函数
1,gets函数
1)gets函数从标准输入读取一行文本存储到数组参数中。
2)一行输入由一串字符加换行符结尾,gets函数丢弃换行符,存入一个NUL字节,最后返回一个非NULL值表示读取成功,当不存在输入行时,返回NULL值。
3)当输入行特别长,gets不能防止函数溢出,应使用fgets。
4)NUL是ASCII字符集’\0’字符,字节模式为全0,NULL是值为0的指针,它们都是整型值,值也相同,可以互换使用,但正确使用代码更清晰。

2,printf函数
1)printf函数执行格式化输出,接受多个参数,第一个参数是描述输出格式的字符串,常以字符串常量形式出现,剩余参数是需要打印的值。
2)格式字符串包含格式代码和普通字符,格式代码将后续参数值按照指定格式输出,普通字符原样输出。

3,scanf函数
1)scanf函数从标准输入读取字符并根据格式字符串进行转换,类似printf函数的逆操作。
2)scanf函数接受多个参数,第一个参数是格式字符串,用于描述期望输入类型,剩余参数都是变量,用于存储读取的输入数据,返回转换成功存储于参数中值的个数。
3)scanf函数标量参数前必须加上&符号,数组参数前不需要加&符号,但数组参数的下标引用前需要加上&符号。
4)scanf中格式代码除了%c,其他格式代码会跳过输入值之前的空白(空格、制表符、换行符等),值后的空白表示该值结束,因此%s格式中间不能包含空白,否则值提前结束。
5)C编绎器不检查数组下标有效性,需要自行编写代码防止数组越界破坏数组之后内存位置的数据。

4,puts函数是gets函数的输出版本,将指定字符串加上换行符写到标准输出。

5,getchar函数从标准输入读取一个字符并返回它的值,如果输入中不存在任何字符,函数返回常量EOF(定义在stdio.h)中,提示文件结尾。
1)EOF是一个整型值,位数比字符类型多,如果读取字符以EOF判断文件是否到达结尾,则需要声明读取字符为整型,足以容纳EOF,防止输入读取的字符意外的解释为EOF。

6,strncpy函数前两个参数分别是目标字符串和源字符串地址,第三个参数指定复制的字符数,源字符串字符数少于指定复制字符数时,以NUL字节填充。
7,strcpy函数接受两个参数,将第二个字符串参数复制到第一个字符串参数,第一个字符串被覆盖。

8,strcat函数接受两个参数,将第二个字符串参数添加到第一个字符串参数末尾。
1)strcpy和strcat第一个参数不能是字符串常量,且确保目标字符串有足够空间,函数不进行空间检查。

9,strchr函数接受两个参数,第一个参数是字符串,第二个参数是字符,函数在字符串中搜索字符第一次出现的位置,搜索成功返回指向这个位置的指针,搜索失败返回NULL。
10,strstr函数搜索第二个字符串在第一个字符串中第一次出现的位置。

编绎
1,编绎器将一个或多个源文件编绎成目标代码,链接器链接目标代码为一个可执行程序。
2,编绎过程首先是预处理器执行文本操作,替换头文件和字符,然后解析源代码语句,可能会产生错误和警告,最后生成目标代码。
3,目标代码是机器指令的初步形式,用于实现程序语句。
4,如果编绎命令行加入了优化选项,则优化器对目标代码进行优化,优化过程需要时间,一般不进行这个过程。在Unix系统目标文件扩展名为.o,Window系统则是.obj。
5,编绎并链接一个源文件时,目标文件在链接完成后删除,编绎文件超过一个时,目标文件不会删除,程序改动后只对修改的源文件重新编绎。
6,程序执行首先需要加载到内存中,具有操作系统的环境加载由系统完成,通过一个小型启动程序与程序链接,负责一系列日常事务,例存储命令行参数以便程序访问,并调用main函数,程序终止后释放程序未关闭的文件、内存等资源。
7,独立环境中程序加载须手动完成,将可执行代码置入只读内存ROM中。
8,程序运行中使用堆栈存储函数局部变量和返回地址,使用静态内存存储静态变量,并在程序整个执行过程中保留。

字符
1,三字母词就是几个字符的序列,合起来表示另一个字符。
??( 表示 [
??) 表示 ]
??< 表示 {
??> 表示 }
??= 表示 #
??/ 表示 \
??! 表示 |
??’ 表示 ^
??- 表示 ~
两个问号开头再尾随一个字符通常不会出现在其他表现形式中,所以三字母词以这种形式表示。
2,转义字符
\? 书写连续多个问号时防止解释为三字母词
\” 表示字符串常量内部的双引号
\’ 表示字符常量’
\\ 表示反斜杠,防止解释为转义序列
\a 退格键
\b 退格键
\f 进纸字符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制数字,表示八进制字符所代表的字符
\xddd 表示十六进制代表字符

标识符
1,标识符即变量、函数、类型等名称,由大小写字母、数字、下划线组成,但不能以数字开关。
2,标识符长度没有限制,但标准允许编绎器忽略第31个以后的字符,同时允许编绎器限制链接器链接的标识符(即外部名称)只识别前六位不区分大写的字符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值