当前位置:首页 > 芯闻号 > 充电吧
[导读]2012—7—25C语言回顾—C语言的特点介于低级语言和高级语言之间的中级语言控制性高效性可移植性面向程序员 C语言程序实现的七个步骤1 定义程序目标2 程序设计3 编写代码4 编译5 运行程序6 测

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分  加油加油加油

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式Linux开发中,快速获取系统状态信息是调试和监控的关键能力。本文整理了7个高频使用的C语言代码片段,涵盖内存、CPU温度、文件操作等核心场景,帮助开发者高效实现系统状态采集。

关键字: 嵌入式Linux C语言

作为当前最广泛应用的对称加密算法,AES-128凭借其128位密钥长度和10轮加密迭代,在保障数据安全的同时保持高效性能。本文将深入解析AES-128的流式实现原理,并提供经过优化的C语言实现方案,特别针对长数据流处理场...

关键字: AES-128 C语言

在C语言的指针宇宙中,函数指针如同一个神秘的传送门,它打破了传统函数调用的静态边界,让程序在运行时能够动态选择执行路径。这种机制不仅赋予代码前所未有的灵活性,更在系统编程、嵌入式开发等场景中扮演着关键角色。

关键字: 函数指针 C语言

在嵌入式系统、数据库开发和多媒体处理等场景中,二进制文件的随机访问是核心需求。C标准库提供的fseek和ftell函数组合,为高效定位文件位置提供了轻量级解决方案。本文通过代码示例和性能对比,解析其实现原理与最佳实践。

关键字: 二进制文件 C语言

结构体作为C/C++中组织异构数据的核心方式,其内存布局直接影响程序性能。本文通过量化实验对比不同对齐策略的内存占用差异,结合编译器指令实现精准优化。

关键字: 结构体 C语言 编译器

在C语言中,字符串操作是程序设计中非常基础且重要的部分。由于C语言本身没有内置的字符串类型,字符串通常以字符数组或字符指针的形式出现。因此,掌握常见的字符串操作函数的实现原理对于深入理解C语言的内存管理、指针操作和字符串...

关键字: C语言

在C语言编程中,循环结构是处理重复任务的核心工具,而break和continue则是控制循环流程的关键指令。虽然两者都用于改变循环的正常执行路径,但它们的行为和适用场景存在本质差异。

关键字: C语言 编程

在C语言编程中,头文件(.h)是代码组织与模块化的核心工具,而宏定义(#define)作为预处理指令,能够显著提升代码的可读性、可移植性和可维护性。

关键字: C语言

在嵌入式实时系统中,多线程编程通过并发执行提升资源利用率,但共享资源访问冲突会引发数据竞争与死锁。锁机制作为核心同步手段,其选择直接影响系统实时性与可靠性。本文从嵌入式场景出发,分析常见锁机制特性,并提出优化策略。

关键字: C语言 多线程编程 嵌入式系统

在C语言编程中,头文件是代码组织和模块化的重要工具。宏定义作为预处理阶段的核心特性,能够显著提升代码的灵活性、可读性和可移植性。一个精心设计的头文件库,配合恰当的宏定义,可以让代码更加优雅高效。

关键字: C语言
关闭