c基础

1.float值参与计算,结果为double
2.int/int 结果还是int 小数点后舍去
3.‘a’占一个字节 “a”占两个字节
4.实型常数不分单双精度,都按双精度double处理
5.逗号表达式的值为最后一个表达式
6.char是用数值型存储的 char一个字节 数值型最少2个字节 将char赋值为int时高8位补零 将int赋值为char时高8位丢失
7.自动类型转换是由编译系统完成的 顺序为char、short->int->unsigned->long->double->
8.位与& 位或| 位反~ 位异或^ 位左移<< 位右移>>
9.单目 三目 赋值运算符为右结合性 其它为左结合性
10. char 1字节,int 2字节,short 2字节,long 4字节,unsigned int 2字节,unsigned long 4字节,float 4字节,double 8 字节
11.常量后缀 L l 长整型 、U u 无符号数 、F f 单精度实型/单精度浮点型
12.在变量赋初值时不允许 int a=b=c=5; 必须要 int a=5,b=5,c=5;
13.复合语句外不加分号。 {int a=5;int b=a;}
14.C语言有9种控制语句,选择if else,switch;循环语句while,do while,for;转向语句:return,break,go to,continue。
15.Turbo C格式字符串一般形式【标志(+、-、空格、#)】【输出最小宽度(十进制整数,长度超出时原样输出、长度不够时补够)】【。精度(十进制整数,精度超出时舍去)】【长度(h:按短整型输出,l:按长整型输出)】类型(d,o,x X,u,f,e E,g G,c,s)
16.printf("格式控制字符串","输出表列") 注意 输出表列的求值顺序为从右到左,输出顺序还是从左到右
17.scanf("格式控制字符串","地址表列")%【*(表示该输入项输入后不赋予相应变量)】【输入数据宽度】【长度】类型(d,o,x ,u,f,e ,c,s)
18.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格、tab、回车作间隔。C编译在碰到空格、tab、回车、非法数据(如对%d12A时,A即为非法数据)时即认为该数据结束。
19.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入字符均为有效字符。如scanf(“%c%c%c”,&a,&b,&c);输入d空格e空格f,则把d赋予a,空格赋予b,e赋予c。
20.如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
21.如果输入数据和输出格式不一致时,虽然编译器能通过,但结果将不正确。
22.关系运算符:优先级低于算术运算符 左结合性 <、<=、>、>= 优先级相同 并且 高于 ==和!=
23.逻辑运算符 && || 左结合性, !右结合性,优先级顺序 !>算术运算符>关系运算符>逻辑运算符(&&和||)>赋值运算符
! > 算术运算符 > 位运算符(<<、>>) > 关系运算符 > 位运算符(&、^、|) >逻辑运算符(&&和||)>赋值运算符
24.条件运算符优先级低于关系运算符和算术运算符,但高于赋值符。结合性为从右往左。
25.switch语句case后要用break语句跳出,case和default顺序可以互换,case后多条语句可以不用{}括起来。
26.break 常用在for 、while 、do while循环语句中,可使程序终止循环而执行循环后面的语句。常与if条件连用,跳出循环。
27.continue 常用在for 、while 、do while循环语句中,可使程序跳过循环体中剩余的语句而强行执行下一次循环。常与if条件连用,加速循环。
28.数组的定义 int a[10];方括号中不能使用变量,只能是常量或常量表达式。
29.char c[10] = {'c','','p','r','o','g','r','a','m'}; char c[] = {"c program"}; char c[] = "c program";后两种比第一种多占一个字节‘\0’
30.字符数组输出char c[] = "basic\nbase"; printf("%s\n",c);
31.字符数组输入char c[15];scanf("%s",c);注意输入时遇到空格则视为结束,即如果输入this is a book 则只把this赋给字符数组c
32.C字符串处理函数,大致分为输入、输出、合并、修改、比较、转换、复制、搜索,其中输入输出的包含“stdio.h”,其他则包含“string.h”
字符串输出函数 puts(字符数组名) 需要格式化输出时可用printf
字符串输入函数 gets(字符数组名) 不以空格作为结束,只以回车作为结束
字符串连接函数 strcat(字符数组名1,字符数组名2)
字符串拷贝函数 strcpy(字符数组名1,字符数组名2)
字符串比较函数 strcmp(字符数组名1,字符数组名2)
字符串长度函数 strlen(字符数组名)
33.C语言不允许嵌套定义函数。一个C源程序有且仅有一个main函数。main函数不能被其他函数调用。
34.C语言函数:函数定义 函数说明int a(int a1);

35.如函数类值为int,在函数定义时可以省略类型说明。如需进行函数说明,则说明时不可省略
36.函数调用中应注意求值顺序的问题,即对实参表中的各量是自左至右还是自右至左求值。
37.以下情况可以省略主调函数中对被调函数的函数说明
1.被调函数的返回值是整型或者字符型
2.被调函数的定义是在主调函数之前
3.在主调函数外已经预先说明了各个函数的类型
38.用数组名 和用 数组元素作实参的几点不同
1.用数组元素作实参是单向值传递
2.用数组名作实参实质上是传递了数组的首地址,这时实参和形参同时指向同一个数组元素,此时形参的值变化也会引起实参的值变化。其实也是值传递,只是传递的值是地址,实际上形参数组并不存在,系统不会为形参数组分配内存
39.用数组名作为函数参数时 形参和实参数组的类型必须一致,但是长度可以不同,因为在调用时只传送首地址而不检查形参数组的长度。
40.局部变量和全局变量 局部变量是在函数内声明的变量 全局变量是在函数外声明的变量 全局变量如果定义在函数之后,在函数中使用时也需要作变量说明。全局变量的说明符:extern。
41.变量的存储类别 动态存储和静态存储 动态存储的变量一般为形参和auto变量
auto自动变量 存储在动态存储区 在函数调用时动态分配内存空间 函数结束时释放 函数每调用一次就初始化赋值一次,如果没有赋初值系统默认为不确定的值
static静态局部变量(注意是局部变量)存储在静态存储区 在程序运行期间都不释放 在编译时赋初值 如果没有赋初值系统默认为0
register寄存器变量 只有auto和形参能声明为寄存器变量 不能任意多的声明寄存器变量
42.#预处理命令 :宏定义命令#define 、包含命令#include、 条件编译等预处理是在编译的第一遍扫描之前进行,
43.无参宏定义命令#define 标识符 字符串
1、只是简单替换,预处理程序不作任何检查,如有错误,仅能在对已展开宏的源程序的编译过程中发现。
2、末尾不加分号,如加分号则一起被替换。
3、宏作用域的终止 #undef 标识符
4、习惯用大写字母标识宏,但是允许用小写字母。
5、可用宏表示数据类型 在用宏表示数据类型时注意和typedef的区别
宏只是简单的替换 是在预处理阶段完成的
typedef是在编译时完成的 不是简单的替换 而是对类型说明符的重命名 此时被命名的标识符具有类型定义说明的功能
44.带参宏定义命令 #define 标识符(形参表) 字符串 调用命令 宏名(实参表);
1、宏名和形参表之间不能有空格,否则视为无参宏
2、宏调用与函数调用的区别 函数调用实参和形参是两个不同的量,各有各的作用域,函数调用时为实参到形参的值传递
宏调用则是简单的符号代换 形参不分配内存空间 不需要进行类型定义
3、宏定义式 要在参数两侧加括号 也应该在整个字符串外加括号
4、可用来定义多个语句。
5、注意同一表达式用宏处理和用函数处理的区别
6、宏定义时的形参是标识符 宏调用时的实参可以是表达式
45.文件包含命令 #include “stdio.h”先在当前源文件目录中查找,如果找不到,再在包含目录中查找 或者 #include <“stdio.h>在包含文件目录中查找
46.条件编译
1、#ifdef 标识符 程序段1 #else 程序段2 #endif
2、#ifndef 标识符 程序段1 #else 程序段2 #endif
3、#if 常量表达式 程序段1 #else 程序段2 #endif
47.指针 和 指针变量 指针是指地址 是常量;指针变量是指取值为地址的变量
48.指针变量的定义 类型说明符 *变量名
49.指针变量的引用 初始化:int a;int *p = &a; 赋值int a;int *p;p = &a;
50.int i,j,*p,*q; i = 1;j = 2; p = &i; p = &j; 注意 p = q; *p = *q;的区别
51.指针变量的运算
5.1.1赋值运算
初始化赋值 int a,*p = &a;
把一个变量的地址赋予指向相同数据类型的指针变量 int a,*p;p = &a;
把一个指针变量赋予指向相同数据类型的指针变量 int a,*pa = &a,*pb;pb = pa;
数组首地址赋予指针变量 int a[5],*p;p = a;或者 p = &a[0];
字符串首地址赋予指针变量 char *p = “this is a book”;
函数的首地址赋予指针变量 int (*p)() = f;--f是函数名
5.1.2指针变量和整型的算术加减操作(只对数组指针变量)向前向后移动
指针变量和指针变量的减操作(只对指向同一数组指针变量)
5.1.3>、<、==关系操作(只对同一数组指针变量)
52.int *p = 0;p为空指针
53.a = &a[0]
54.P166
55.要注意指针变量的当前值
56.*p++等价于*(p++)注意和(*p)++的区别 因为* 和 ++ 的优先级相同,且右结合
57.数组名作为函数参数 数组名就是数组的首地址,实参向形参传递数组名实际上就是传递数组的首地址,此时形参和实参指向同一个数组。
数组指针变量作为函数参数的用法一致。
58.二维数组
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
printf("%d\n",a); /*-82 */
printf("%d\n",*a); /*-82*/
printf("%d\n",a[0]); /*-82*/
printf("%d\n",&a[0]); /*-82*/
printf("%d\n",&a[0][0]); /*-82*/

printf("%d\n",a+1); /*-74*/
printf("%d\n",*(a+1)); /*-74*/
printf("%d\n",a[1]); /*-74*/
printf("%d\n",&a[1]); /*-74*/
printf("%d\n",&a[1][0]);/*-74*/

printf("%d\n",a+2); /*-66*/
printf("%d\n",*(a+2)); /*-66*/
printf("%d\n",a[2]); /*-66*/
printf("%d\n",&a[2]); /*-66*/
printf("%d\n",&a[2][0]); /*-66*/

printf("%d\n",a[1]+1); /*-72*/
printf("%d\n",*(a+1)+1); /*-72*/
printf("%d\n",*(a[1]+1)); /*5*/
printf("%d\n",*(*(a+1)+1));/*5*/

59.指向二维数组的指针变量定义:类型说明符 (*指针变量名)[长度]
60.函数指针变量-指向函数的指针变量 定义: 类型说明符 (*指针变量名)() 调用:(*指针变量名)(实参表);
61.指针形函数-函数的返回值为指针 定义:类型说明符 *函数名(形参表) 调用 函数名(实参表);
62.指向指针的指针 定义:char **p;
63.结构指针变量 定义 struct 结构名 *结构指针变量; struct stu *pstu; pstu= &boy1;
结构指针变量成员访问: (*结构指针变量).成员名;(注意一定要用括号括起来,.的优先级要比*高)

或者 结构指针变量->成员名;
64.链表 malloc : struct stu {int num;char[] name;} *stus; stus = (struct stu*)malloc(sizeof(struct stu));

sizeof :sizeof(struct stu);

free :free(stus);

calloc :struct stu {int num;char[] name;} *stus; stus = (struct stu*)calloc (2,sizeof(struct stu));
65.枚举 定义:enum 枚举名{枚举值表};enum weekday {sun,mon,。。。。sat}; enum weekday a,b,c;
赋值:1、不能对枚举的元素再赋值 即 sun = 5;是错误的
2、枚举元素本身由系统定义了一个表示序号的数值sun的值为0,mon的值为1。。。。。。
只能把枚举值赋予枚举变量,而不能把枚举元素的数值直接赋予枚举变量。
如果一定要把枚举元素的数值赋予枚举变量,可以使用强制类型转换 a = (enum weekday)1;
66.类型定义符 typedef
67.位运算符 &(按位与)、 |(按位或)、^(按位异或)、 ~(按位取反)、 <<(左移)、 >>(右移)
68.位域(位段) struct bs {int a : 8 ; int b : 2 ; int c : 6 ;};
1、一个位域必须存储在同一个字节中
2、空域(无位域名)占位 : 0 表示从下一字节开始存放
3、位域在本质上就是一种结构类型,不过其成员是按二进位分配的。
69.文件
分类:普通文件、设备文件;文本文件(ASCII)、二进制文件(二者均为流式文件)
文件指针:FILE *指针变量标识符; FILE *fp;
文件的打开和关闭:fopen(文件名,使用文件方式);返回指向文件的指针,如果打开失败则返回NULL

          fclose(文件指针);返回0为正常关闭。
使用文件方式参见P215
文件读写:
stdout为标准输出
字符读写函数 字符变量 = fgetc(文件指针);

字符读写函数(字符为单位):返回值为字符,文件以EOF为结束标志
fputc(字符量,文件指针);

写入成功则返回写入字符,失败则返回EOF
字符串读写函数 fgets(字符数组名,n,文件指针);

返回值为字符数组首地址,在读出n-1个字符之前,遇到EOF或者换行则结束读出
fputs(字符串,文件指针);

字符串可以是字符串常量、字符数组名、指针
数据块读写函数 fread(buffer,size,count,fp);

               buffer为指针
fwrite(buffer,size,count,fp);
格式化读写函数 fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);
文件定位:
rewind(文件指针); 使文件内部位置指针移到文件头
fseek(文件指针,位移量 ,起始点);位移量要为Long型,常数时要带L后缀(一般用于二进制文件中,文本文件要进行转换)
feof(文件指针);判断文件是否处于文件结束位置
ferror(文件指针);判断文件在各种读写操作中是否出错,未出错返回0
clearerr(文件指针)
70.一个C语言源程序由多个文件组成,一个文件由多个函数组成。
71.%(求余)两边必须都为int型
72.getchar() getch() putchar()--字符 gets() puts();--字符串
73.数值数组不能用赋值语句整体赋值、输入、输出,必须用循环语句逐个对数组元素进行操作
scanf向数组输入字符串时遇到空格视为结束标志、gets向数组输入字符串时可以带空格

74.函数值为整型或者字符型,则函数调用时可以省去类型说明,此时函数值统一按整型处理
75.符号常量 #define P 10
76.条件运算符和赋值运算符结合性都是自右向左
77.标号和goto语句必须处于同一函数,但可以处于不同的循环层。
78.sizeof(数组则为数组定义的长度、字符串指针则为指针实际有效字符长度+1带\0)

strlen(实际有效字符长度、不带\0)

79.(*p).x 必须括号括起来 因为 .的优先级要高于*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值