1. C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言
2. 数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型void四大类。
3.计算机中的原码、反码和补码
http://www.cnitblog.com/mantou/archive/2005/08/01/1239.aspx
总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1
比如11111111是-1,10000000是-128
4,。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。
5,指针运算符:用于取内容(*)和取地址(&)二种运算。
例如:
&a, &b
分别表示变量a和变量b 的地址
6,printf();
7, scanf中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。
如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
例如:
scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符“ , ”作间隔符,故输入时应为:
5,6,7
又如:
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为:
a=5,b=6,c=7
8,表达式1? 表达式2: 表达式3
9,素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
素数就是质数
10, 可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。
11,字符串连接函数strcat
格式: strcat (字符数组名1,字符数组名2)
12, 字符串拷贝函数strcpy
格式: strcpy (字符数组名1,字符数组名2)
13,字符串比较函数strcmp
格式: strcmp(字符数组名1,字符数组名2)
14,测字符串长度函数strlen
格式: strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。
15,main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个
程序。一个C源程序必须有,也只能有一个主函数main。
16,。函数定义和函数说明
可以看出函数说明与函数定义中的函数头部分相同,但是末尾要加分号。
在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的
类型,以便在主调函数中按此种类型对返回值作相应的处理。
当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。
17,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
18,C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数
的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。
19,一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数
20, 前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。
从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
用户存储空间可以分为三个部分:
1) 程序区;
2) 静态存储区;
3) 动态存储区;
全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;
动态存储区存放以下数据:
1) 函数形式参数;
2) 自动变量(未加static声明的局部变量);
3) 函数调用实的现场保护和返回地址;
对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
21. auto变量& static变量
22,register变量
为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。
说明:
1) 只有局部自动变量和形式参数可以作为寄存器变量;
2) 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
3) 局部静态变量不能定义为寄存器变量。
23,用extern声明外部变量
24,预处理部分
所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。
C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等
25, 文件包含
#include"stdio.h"
#include<math.h>
但是这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;
使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。
26,在一个指针变量中存放一个数组或一个函数的首地址有何意义呢? 因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来
,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可
27,指针变量如何赋值和引用
1. 指针运算符
1) 取地址运算符&:取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf函数及前面介绍指针变量赋值中,我们已经了解并使用了&运算符。
2) 取内容运算符*:取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。
需要注意的是指针运算符*和指针变量说明中的指针说明符*不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以
表示指针变量所指的变量。
28,把数组的首地址赋予指向数组的指针变量。
例如:
int a[5],*pa;
pa=a;
(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)
也可写为:
pa=&a[0]; /*数组第一个元素的地址也是整个数组的首地址, 也可赋予pa*/
当然也可采取初始化赋值的方法:
int a[5],*pa=a;
29,⑤ 把字符串的首地址赋予指向字符类型的指针变量
例如:
char *pc;
pc="C Language";
或用初始化赋值的方法写为:
char *pc="C Language";
这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。
30,把函数的入口地址赋予指向函数的指针变量。
例如:
int (*pf)();
pf=f; /*f为函数名*/
31,指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。
如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。例如:
int a[5],*pa;
pa=a; /*pa指向数组a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值为&pa[2]*/
32,结构体与共用体
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在这个结构定义中,结构名为stu,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为score,实型变量。应注
意在括号后的分号是不可少的。
struct stu boy1,boy2;
说明了两个变量boy1和boy2为stu结构类型。
在定义结构类型的同时说明结构变量。
例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
}boy1,boy2;
boy1.num 即第一个人的学号
boy2.sex 即第二个人的性别
33,分配内存空间函数malloc
例如:
pc=(char *)malloc(100);
表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。
34, 分配内存空间函数 calloc
例如:
ps=(struet stu*)calloc(2,sizeof(struct stu));
其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。
35,释放内存空间函数free
36,链表的基本操作对链表的主要操作有以下几种:
1. 建立链表;
2. 结构的查找与输出;
3. 插入一个结点;
4. 删除一个结点;
37,枚举类型
38, 类型定义符typedef
39,位运算
40,文件操作
分享到:
相关推荐
本资源是自己在学习C语言的随手笔记,不具有任何教学功能,仅供参考。
学习C语言时做的笔记,也是《C语言数据类型——基本类型,构造类型,枚举类型,指针类型》文章对应的思维导图,仅供学习参考,如有侵权,请联删
《新手C学习笔记》是一份专为初学者设计的学习资料,旨在帮助编程新手,特别是对C语言感兴趣的“菜鸟”快速入门。这份文档包含了前辈们在编程道路上积累的宝贵经验,是一份来之不易的资源。下面,我们将深入探讨这份...
个人在职业嵌入式软件开发培训学校几个月的培训课件整合,包含自己的学习心得等,提供出来,仅供参考,绝对适合C初学者.
蓝桥杯嵌入式11-14届编程题代码实现(带注释), 复习笔记,...仅供参考, 不是最优解 作者:XvSenfeng(cnu嵌入式系统练习生) 邮箱:1458612070@qq.com 仓库地址:https://github.com/XuSenfeng/Stm32App 使用keil5, CubeMX实现
在C语言中,全局变量是一种在函数外部声明的变量,它的作用域覆盖了整个程序,...此外,标签“c语言 笔记”表明这份笔记是关于C语言的,可能是开发者在学习或工作中记录的关键点和实践心得,供未来参考或同行交流使用。
<项目介绍> - 基于 STM32G0 的带 USB C 电源传输的开源 Lipo 电池充电器 LiPow 固件 使用 USB Type C 和 Power Delivery 为锂...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
它可能包含了一些个人整理的学习材料,这些材料可能未公开,仅供制作者自己或特定人群参考,因此可能包含了制作者独特的理解或者解析。 【标签】"C" 表明这个课程可能涉及到C语言编程。C语言是一种基础且强大的编程...
压缩包子文件的文件名称列表仅给出“【程序分享】”,这可能是一个目录或者文件夹名称,表明压缩包内包含了可以共享的程序或代码片段,供学习者参考和实践。 综合以上信息,这个教程可能会涵盖React的基本概念、...
leetcode安卓 学习算法,终生学习. 算法本质是使程序片段执行得到一种最优最快的方法, 从而实现计算量最少最优,CPU占用最低,响应最快的结果. 实战算法 提供golang,php,c语言及多种解法实现....仅供同学们参考
leetcode安卓 学习算法,终生学习. 算法本质是使程序片段执行得到一种最优最快的方法, 从而实现计算量最少最优,CPU占用最低,响应最快的结果. 实战算法 提供golang,php,c语言及多种解法实现....仅供同学们参考
6. **笔记**:可能是一位经验丰富的开发者或讲师的个人笔记,包含了他们对C++的独特见解和技巧。 7. **测试脚本**:用于自动化测试代码的脚本,如JUnit测试用例,确保代码正确无误。 8. **编译器配置文件**:如...
【描述】"Linuxc供大家学习 只是自己学习的一个过程记录了下来 欢迎来下载啦"这段描述表明,这是一个个人的学习记录,作者愿意与社区共享自己的学习成果。这种分享精神在开源社区中非常常见,通过这样的方式,新手...
MSP430是德州仪器(Texas Instruments,简称TI)公司推出的16位低功耗微控制器系列...以上就是MSP430学习笔记中的主要知识点,涵盖从硬件基础特性到编程结构的各个方面,为从事相关工作的工程师提供了宝贵的参考资料。
参考(引用,涉及)['refәrәns]' -->reference variable 参量, 参考变量,引用变量 Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'...
4. 参考资料:包括数据手册、技术规格、应用笔记、示例代码等。这些资料能帮助开发者了解单片机的具体技术细节和应用方法。 5. 开发社区和论坛:互联网上有许多单片机开发相关的社区和论坛,如EEWORLD、CSDN等,...
我们有许多源代码公开的操作系统,可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行,而且细节之间经常互相关联,要...
我们有许多源代码公开的操作系统,可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行,而且细节之间经常互相关联,要...