C语言学习回顾整理
扫描二维码
随时随地手机看文章
2012—7—25
C语言回顾
—C语言的特点
介于低级语言和高级语言之间的中级语言
控制性
高效性
可移植性
面向程序员
C语言程序实现的七个步骤
1 定义程序目标
2 程序设计
3 编写代码
4 编译
5 运行程序
6 测试和调试程序
7 维护和修改程序
C语言的编译机制四个部分
预编译————>编译————>汇编————>连接
预编译是产生干净的C的过程去除一些不需要的部分比如注释之类
编译的过程是将C语言程序中非汇编代码转换为汇编代码
汇编就是产生目标代码的过程
连接指连接启动代码和库代码生成机器码
C语言中有37个关键字其中main 不是关键字只是程序的一个入口
标识符的定义
标识符用来标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符序列
标识符的组成规则:
不能是关键字
开头只能是字母和下划线
随后跟若干个字母,数字,下划线
注:C语言中对标识符大小写敏感
命名规则示例:DVD_nucDataGotFromDVD;
DVD 项目名
uc unsignedchar
DataGotFromDVD 获取路径
现代计算机可分为几个部件
1 中央处理器(CPU)
2 随机访问存储(RAM)
3 永久存储器(硬盘)
4各种外围设备(键盘,鼠标,监视器,等)
数据类型
[singed] int 2byte 16bit
Unsigned int 2byte 16bit
[singed] short 2byte 16bit
Unsigned short 2byte 16bit
Long 4byte 32bit
Float 4byte 32bit
Double 8byte 64bit
Long double 16byte 128bit
求count所占的字节
int count;
sizeof(count);
sizeof(int);
两种方法都可以
数据类型决定
1 占内存大小
2内存中的布局
3 数据的行为
浮点数之间的比较不可以用= =
Float f=0.0;
For(int i=1;i<=26;i++){ f+=0.1;}
If((f-2.6)>1e-6&&(f-2.6)<1e-6)//比较与2.6的大小 float精度为小数点后6~7位
转义字符
n---回车换行
a---警报
b---退格
r---回车不换行,当前位置移到本行行首
\---反斜杠
’---单引号
”---双引号
ddd ---八进制值(d表示一个八进制数字)
如101 表示10进制的65
xhh ---十六进制值(h表示一个十六进制数字)
使用宏常量的好处:
1. -增加程序可读性;
2. -减少书写错误;
3. -便于维护;
宏常量举例
#define PRICE 30
void main( )
{
int num, total;
num=10;
total=num * PRICE;
printf("total=%d",total);
}
使用const而不是宏来定义常量的好处:
1、const定义的常量编译器可以对其进行数据类型安全检查,而#define宏定义的常量却只是进行简单的字符替换,且有时还会产生边际效应(不如你愿)。
所谓边际效应举例如下: #define N 100 #define M 200 + N 当程序中使用 M*N 时,原本想要 100 * ( 200+ N )的却变成了 100 * 200 + N。
2、有些调试程序可对const进行调试,但不对#define进行调试。
3、当定义局部常量时,const作用域仅限于定义局部常量的函数体内。但用#define时其作用域不仅限于定义局部常量的函数体内,而是从定义点到整个程序的结束点。
使用枚举常量:
注:
枚举常量一定是整形量
枚举常量不能取地址
枚举常量举例
int main( )
{
enum solution {a,b,c,d};//枚举常量enum solution item= b;
printf("%d",item);
}
int a = 10;//定义的同时初始化
int a;//定义未初始化
a = 10;//赋值
重点:
变量的初值问题:
#include
int i;
void main( )
{
static int j;
int k;
printf("%d,%d,%d.n",i, j, k);
}
全局变量、静态变量系统默认分配初值,局部变量系统不会分配初值。当变量定义没进行初始化时,
全局变量、静态变量系统默认分配初值,
局部变量系统不会分配初值。
变量运算中的隐式类型转换
什么情况下发生?
运算转换:不同类型数据混合运算时。规则:不同类型数据运算时先自动转换成同一类型。规则是由低到高、简单到复杂。
赋值转换:把一个值赋给与其类型不同的变量时。右服从左。float f = 1.0;int* p = malloc(sizeof(int));
函数调用:实参与形参类型不一致时转换,实参服从形参。
函数返回:服从返回值。
变量的定义和声明
变量声明:告诉编译器变量的类型、存储类型,不分配存储空间。 extern int i;
变量定义:告诉编译器在此处分配存储空间创建变量。
int i= 1;
同一变量定义只能一次,但是可以声明多次。
结构体概念:多个的数据组合成的一个整体,它是一种构造数据类型。
结构体类型与结构体变量是不同概念。类型:不分配内存,不可参与运算。
结构体变量:分配内存,可以参与运算
特点:
可以对结构体变量整体初始化;
可以将一个结构体变量整体赋值给另一个结构体变量。
可以对整个结构体变量或各成员取地址;
不可以在定义结构体类型时让成员带有初值
不可以判断两个结构体变量是否相等
指针变量与0值比较(指针非空比较)
尽管NULL的值与0相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的if语句如下:
if (NULL == p) 或if (p != NULL) // p与NULL显式比较,强调p是指针变量
不要写成:
if (p == 0)
if (p != 0) // 容易让人误解p是整型变量
结构体变量赋值的三个方法
#include
#include
struct Student{
int score;
char name[20];
}stu1,stu2,stu3;
//stu1={98,"zhangsan"},stu2={89,"lisi"},stu3={96,"wangwu"};
void main(){
float avg_score;
struct Student * pstu1=&stu1;
struct Student * pstu2=&stu2;
pstu1->score=98;
strcpy(pstu1->name,"zhangsan");
(*pstu2).score=89;
strcpy((*pstu2).name,"lisi");
stu3.score=96;
strcpy(stu3.name,"wangwu");
avg_score=(float)(stu1.score+stu2.score+stu3.score)/3;
printf("%fn",avg_score);
printf("%s%dn",stu1.name,stu1.score);
printf("%s%dn",stu2.name,stu2.score);
printf("%s%dn",stu3.name,stu3.score);
}
这是实习第一天所讲的课程,╮(╯▽╰)╭ 有点多但讲的很实用第一天的话给自己打70分 加油加油加油