C语言知识点3

分支语句

分支语句的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的顺序

if_else

对于if语句来说他有三种可能判断的情况
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这三种情况 在if与if语句进行嵌套时,他else和最近的if结合。

布尔变量与零值比较

不可以将布尔变量直接与TUER,FALSE或者1,0进行比较。例如

if (flag) // 表示 flag 为真
if (!flag) // 表示 flag 为假

但是下面的用法是不正确的

if (flag == TRUE)

if (flag == 1 )

if (flag == FALSE)

if (flag == 0)

整形变量与零值比较

应当将整型变量用“==”或“!=”直接与 0 比较。

浮点变量和零值比较

不可将浮点变量用“==”或“!=”与任何数字比较。 应该设法转化成“>=”或“<=”形式。

指针变量与零值比较

应当将指针变量用“==”或“!=”与 NULL 比较。

switch多分支结构

对于switch语句,他是一种选择结构的语句,它可以用来代替拥有多个分支的 if else 语句。

switch(整形变量表达式)//它里面只能判断整形
{
    case 常量1:语句块1break;
    case 常量2:语句块2break;
    case 常量3:语句块3break;
    case 常量4:语句块4break;
       .......
    case 常量n:语句块n;break;
    default:语句;break;
}

C语言的一些基本规则

注释

当代码过长时,尤其是有多重嵌套,应在一些段落的结束处加注释。

类的版式:

(1)private 类型的数据写在前面,而将 public 类型的函数写在后面, 采用这种版式的程序员主张类的设计“以数据为中心”,重点关注类的内部结构。

(2)将 public 类型的函数写在前面,而将 private 类型的数据写在后面,采用这种版式的程序员主张类的设计“以行为为中心”,重点关注的是类应该提供什么样 的接口(或服务)。

命名规则:

全局函数:动词/动词加名词

类的成员函数:动词

避免名字中出现数字编号

类名和函数名用大写字母开头的单词组合而成

静态变量加前缀 s_

如果不得已需要全局变量,则使全局变量加前缀 g_

类的数据成员加前缀 m_

为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准

OpenGL 的所有库函数 均以 gl 开头,所有常量(或宏定义)均以 GL 开头。

二进制有四种操作(位运算)

//&(与)

//|(或)

//^(双目运算)异或

//~(单目运算)位反

引用

引用必须先初始化,没有空引用,引用不能二级引用

字符与字符串

字符串由一个或多个字符组成 //

字符串都是隐藏了一个结束符,‘\0’

scanf_s

输入语句是将键盘输入的内容放入地址里面去。

","的用法

“,”的优先级最低,x=(a+b,b+2,c+3),最后输出c+3;

三种循环

for( ; 表达式2; )
while()
{
}
do
{

}while

死循环

for( ; 表达式2; )

若没有表达式2循环就会成为死循环
while语句的死循环

while(1);

dowhile语句的死循环

do
{
}while(1);

汇编:

mov

他是传送数据的指令

eax

EAX寄存器:累加器,在乘法和除法指令中被自动调用;在win32中,一般用在函数的返回值中。

ebx

他是"基地址"(base)寄存器, 在内存寻址时存放基地址。

ecx

他是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

edx

edx总是被用来放整数除法产生的余数。

esi/edi

分别叫做"源/目标索引寄存器,因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.

ESP

栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。

EBP

基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

eip

EIP寄存器,用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。

push

为栈增加一个元素 ,把字压入堆栈.

pop

从栈中取出一个元素 ,把字弹出堆栈.

add:加法.

inc:加 1

div:无符号除法.

mul:无符号乘法.

sub:减法

call:过程调用

CPU执行call指令时,进行2步操作:

  1. 将当前的IP或CS和IP压入栈中
  2. 转移

ret:用栈中的数据,修改IP的内容,从而实现近转移;

mov ebx,10h:

mov[ebx],10h:

ret

返回。相当于跳转回调用函数的地方。(对应的call指令来调用函数,返回到call之后的下一条指令。)

JMP

功能: 跳往指定地址执行 语法: JMP 地址

跳转语句:

break;每次跳出一层循环

continue:只结束本次循环

goto:标号(字符后加“:”)只能在本函数内跳转

return:退出函数

exit:include<stdlib.h>,在函数中当前进程被杀死,在主函数中和return一样

数组

对于数组用之前要进行初始化,
数组由元素的类型和元素的数量组成的(组合类型)

数组的定义:int ar[常量];

内存中连续存放:

查表法:用for循环来逐一打印

在输出语句中(%08d)宽度为八,不够用零补。

返回值的规则

(1),不要省略返回值的类型,在c语言中,凡不加类型说明的函数,一律自动按整型处理 .

(2)函数名字与返回值类型在语义上不可冲突。 例如C语言标准库函数的getchar.

char c;

c = getchar();

if (c == EOF)

按照 getchar 名字的意思,将变量 c 声明为 char 类型是很自然的事情。但不幸的是 getchar 的确不是 char 类型,而是 int 类型,其原型如下: int getchar(void);

(3).不要将正常值(读取正确的值)和错误标志(getchar 读取的值错误类型或者结束的时候,它会返回一个标志,这个标志就是错误标志)混在一起返回。正常值用输出参数获得,而 错误标志用 return 语句返回。

getchar函数读取的是字符型,它会将其转化为ascall值的形式存储在内存中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值