《C语言程序设计》笔记

1.转义字符:
\a:警告声
\b:退格,将当前位置移到前一列
\f:换页,将当前位置移到下一页开头
\n:换行,将当前位置移到下一行开头
\r:回车,将当前位置移到本行开头
\t:横向跳格,跳到下一个tab位置
\0:字符串终止字符

2.stdio是standard input/output 的缩写,即标准输入输出。有关输入输出的函数的格式均定义这里

3.float 4个字节,double 8个字节,short 2个字节,int和long 4个字节(这里指的是vs,有一些软件不一样)

4.314.159 规范化的指数形式为:3.14159E+002,或者也可以表示成 3141.59e-001

5.数据之间的转换:
/1:将字符型数据赋给整型变量:因为字符型变量占8位,整型变量在内存中至少占16位,所以有的系统会把多余的位都赋0,有的系统会根据字符型数据的最高位的值来决定补1还是补0。
/2:整型之间的转换:将占位数少的变量赋值给占位数多的变量的时候,原值传送到占位数多的变量的低位,此时注意其他高位的符号扩展问题。而将占位数多的变量赋值给占位数少的变量时,可能会丢失数据。

6.注意i++和++i之间的区别

7.a=b=c=5分开就是:c=5,b=c,a=b。但是在变量的声明过程中不允许给连续多个变量赋值。

8.逗号运算符:i=(表达式1,表达式2……),先执行表达式1,再执行表达式2,最后一个表达式的值赋给i。

9.printf()和scanf()函数的输出格式字符:
u:无符号十进制整数
e/E/g/f/G:浮点数
x/X:十六进制整数
l/h:输出长/短整型数据
o:八进制整数
printf("%-7.5lf",a);
加符号是向左对齐,7是数据输出的最小宽度,如果超出,字段会自动加长长度,.5是浮点型后面显示的小数位数。

10.getchar()获取一个字符,putchar()输出一个字符,getch()获取一个字符但是在屏幕上看不到输入的这个字符,可以用于用户输入密码。

11.vs里面好像不可以用scanf()函数,要用scanf_s()代替。好像也不可以用getch()函数,要用_getch()代替。

扫描二维码关注公众号,回复: 8813612 查看本文章

12.二进制和八进制和十六进制的负数问题:

13.条件运算符/三目运算符:表达式1?表达式2:表达式3,含义为:表达式1的值为真时,取表达式2的值为该条件表达式的值,否则取表达式3的值为该条件表达式的值。

14.goto:先在函数的某个地方写一个语句标号,比如loop:,然后goto loop;则会让程序无条件地跳转到loop标识的地方执行。

15.二维数组元素的初始化:int b[2][3]={ { 1,2 } , { 3 } };相当于b[0][0]=1,b[0][1]=2,b[0][2]=0,b[1][0]=3,b[1][1]=0,b[1][2]=0。

16.变量的划分:变量有作用域和存储类别两个属性,从作用域划分可以把变量分为局部变量和全局变量,全局变量又分为程序级全局变量和文件级全局变量。从存储类别划分可以把变量分为静态存储变量(static)和动态存储变量,动态存储变量又分为自动存储类型变量(auto)和寄存器存储类型变量(register)。
程序级全局变量作用域大于文件级全局变量,程序级全局变量在程序的某个文件中定义后,程序的其他文件中如果要使用它,只需要用extern声明。文件级全局变量定义时要用说明符static进行声明,文件级全局变量的作用域是它所在的程序文件,它不可以被其他程序文件所使用,所以用static声明的全局变量可以限制它的作用域的扩展,达到信息屏蔽的目的。
自动存储类型变量是系统默认的类型,寄存器存储类型变量的存储单元被分配在寄存器中,而寄存器的存取速度比内存的存取速度快的多,所以通常将频繁使用的变量放在寄存器中。静态存储变量占用静态存储区的固定的内存单元,即使它所在的函数调用结束,也不会释放该存储单元,其值会被继续保留,且它在编译的时候被分配内存、赋初值,且只被赋初值一次。

17.c程序运行时占用的内存空间分为三部分:程序区、静态存储区和动态存储区。程序运行期间的数据分别存放在静态存储区和动态存储区中。
静态存储区用来存放程序运行期间所需占用固定存储单元的变量,如全局变量和静态类别的局部变量。
动态存储区存放不需要长期占用内存单元的变量,当程序运行进入定义变量的函数或者复合语句时才为变量分配动态存储空间,当离开函数或者复合语句时便释放所占用的内存空间。分配和释放是动态的,所以如果在一个程序中两次调用同一个函数,那么分配给此函数中的局部变量的存储空间地址可能不相同。
//只有局部变量和形参可以作为register变量,全局变量不行。
//register变量不可以用取址符。
//好像现代c语言编译的时候会自动选择将变量存储在内存中还是寄存器中,而且还很智能,所以不用使用register类型变量,存疑。
//在vs里面,不可以用auto int 定义变量,auto 直接加变量名,且必须给变量赋一个初值,系统会根据这个初值选择变量的类型。

18.函数分为内部函数和外部函数,内部函数要用static定义,只可以在该源文件中被调用,外部函数用extern或者省略,声明之后可以被程序中的其他源文件中的函数所调用。
//利用好静态函数和文件级全局变量可以一定程度上不用考虑重名的问题。

19.预处理命令:
1/带参数的宏定义:#define S(a,b,h) (a+b)*h/2 定义完之后在程序中只需使用S(1,2,3)就可以完成 (a+b)*h/2 的计算。
宏展开在编译时进行,所以不占用程序运行时间,在展开时并不分配内存单元,只是替换,而如果要使用函数的话,既占用程序运行时间,而且还要考虑形参和函数的类型问题,而且还要为形参分配临时的内存单元。
2/条件编译
1)#if 格式:#if…#else…#endif
2)#ifdef格式:#ifdef…(#else)…#endif
3)#ifndef格式: ifndef…(#else)…#endif
ifdef是if define的简写,ifndef是if not define 的简写。

发布了8 篇原创文章 · 获赞 0 · 访问量 439

猜你喜欢

转载自blog.csdn.net/weixin_45467056/article/details/99708960