【无标题】

C语言总结

  1. 进制转换
  2. 二进制、八进制、十进制、十六进制
  3. 二进制: 0~1(逢二进1)
  4. 八进制:0~7(逢八进1)
  5. 十进制:0~9(逢十进1)
  6. 十六进制:0 ~9、a~ f(A~F)(逢16进1)
  7. 为了区分不同的进制:八进制前加0,十六进制前0x(0X)(0x7fa   0X7FA)
  8. 十进制:76  八进制:076  十六进制:0x76、0X76
  9. 其他进制转十进制:(注意:从右往左:从0次幂开始)
  10. 二进制转十进制:1010 0101 = 1*2^0+1*2^2+1*2^5+1*2^7
  11. 八进制转十进制:076=6*8^0 + 7*8^1  
  12. 十六进制转十进制:0xafc = 12*16^0+15*16^1+10*16^2
  13. 十进制转其他进制:
  14. 十进制转二进制:除2倒取余数
  15. 十进制转八进制:除8倒取余数
  16. 十进制转十六进制:除16倒取余数
  17. 二进制和八进制:(将每一个
  18. 八进制数用三个bit的二进制数去表示)

2、基本的数据类型

2.1基本数据类型

关键字:系统预先定义好的,有特殊含义的,并且都是小写不能重新定义

一共有32个:

数据类型:charshortintlongfloatdoubleenum、union、struct、void

控制语句:if、else、for、do、while、switch、case、default、breakcontinuegoto

存储类型:auto、staticexternregister

const:只读

return:返回函数

signed:有符号数

unsigned:无符号数

sizeof:计算所占内存空间的大小:单位:字节

typedef:给一个已有的数据类型起别名

volatile: 防止编译器优化

标识符:程序员自己定义的,一般用来定义变量名,函数名,类型名

命名规范:(见名知意)

32os:分别占据多少个字节:

字符型:char(1字节)

整型:int(4字节)   short(2字节)   long4字节)

浮点型:float(4字节)   double(8字节)

64os:

字符型:char(1字节)

整型:int(4字节)   short(2字节)   long8字节)

浮点型:float(4字节)   double(8字节)

2.2、转义字符

 

3、常量

定义:在程序运行期间,不会也不能被改变的量

3.1、整型常量

二进制:1010

八进制:076

十进制:99  -2

十六进制:0xaf   0X6FC

(默认情况下,为有符号数:int、short、long)

无符号的int:66U

长整型:66L

无符号的长整型:66UL

3.2、浮点型常量

小数:3.14   10000(浮点型常量也包括整形常量)

指数:10000 = 1*10的4次方   1e+4   1e-4

//error:(1*10^4)

%g:选择小数或者指数比较短的一种形式进行输出

^ :异或(位运算符),并不是指数

3.3、字符串常量

hello”  “hi”

字符串以‘\0’结尾

3.4、标识常量(宏)

宏只是一个单纯的替换!!!

:#define  宏名  表达式

注意:

1、宏名一般用大写表示,小写也可以,因为要和普通的变量区分开来,所以用大写

2、宏后没有分号

4、变量

定义:就意味着要在内存空间中开辟空间

如何定义一个变量?

<存储类型>  数据类型   变量名;

存储类型:决定了开辟的空间在内存空间中的哪个分区

数据类型:决定了开辟的内存空间的大小

变量名:开辟的内存空间的名字

存储类型:auto、static、extern、register

存储类型:auto、static、extern、register

auto:修饰局部变量,修饰的变量存储在栈区

extern:修饰全局变量,修饰的变量存储在静态区

static:既可以修饰局部变量,也可以修饰全局变量,修饰的变量存储在静态区

register:修饰局部变量,存储在寄存器中;

auto修饰局部变量,修饰的变量存储在栈区

register:修饰局部变量,修饰的变量存储在寄存器中,建议将变量存储在寄存器中,提高运行速度,但是寄存器中的内存空间很小,因此,当用register修饰时,如果寄存器中已满,变量就会存储在栈区

extern修饰全局变量,修饰的变量存储在静态区

程序可以由多个.c构成,但是只能有一个main函数

Static即可以修饰全局变量,也可以修饰局部变量

修饰局部变量时,延长局部变量的生命周期,如果局部变量没有初始化,其值为0;如果初始化了,则只能初始化一次;

(延长了生命周期,但是并没有延长作用域!!)

5、运算符

单算移关与,异或逻条赋

单目运算符、算术运算符、左移、右移、关系运算符、按位与、异或、按位或、逻辑运算符、

条件运算符、赋值

算术运算符

+  -  *  /  %  ++  --

%:取余

注意:不能用于浮点数

++在前:先自加,在赋值

++在后:先赋值,在自加

注意:如果a++或者++a,单独成立一条语句,都相当于给a加1;

关系运算符

>  <  >=  <=  ==  !=

关系运算符:比较两者之间的关系,结果为(真1或者假0

//注意 (0 < a < 5) error

等号的书写:将常量写在等号的左边

逻辑运算符

&&  ||   !

&&

表达式1  && 表达式2

&&截断法则:有一个为假,结果就为假;前一个为假,后面就不在进行运算了

||

表达式1  || 表达式2

截断法则:有一个为真,结果就为真,前一个为真,后面就不在进行运算了

sizeof运算符

sizeof:计算所占内存空间的大小:单位:字节

sizeof(数据类型)  

sizeof(变量名)

三目运算符

表达式1 ? 表达式2 :表达式3

判断表达式1是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则,就将表达式3的值作为整个表达式的值

逗号运算符

表达式1,表达式2,表达式3,。。。。。,表达式n

从左往右,依次去执行每个表达式,最后将表达式n的值作为整个表达式的值

注意:逗号运算符的优先级是最低的,因此在使用时要加上括号

6、三大结构

三大结构:顺序结构、选择结构、循环结构

顺序结构

语句按照一定的先后顺序去执行

单分支if选择结构

If(表达式)

{

语句;

}

先判断表达式是否成立,如果成立,就执行语句。

3.2.2 双分支if选择结构

If(表达式)

{

语句1;

}

else

{

语句2;

}

多分支if选择结构

If(表达式1)

{

语句1;

}

Else if(表达式2)

{

语句2;

}

Else if(表达式3)

{

语句3;

}

。。。。

else  if(表达式n)

{

语句n;

}

else

{

语句n+1;

}

switch语句

Switch(表达式)

{

Case 标号1:

语句1;

Case 标号2:

语句2;

Case 标号3:

语句3;

。。。。

Case 标号n:

语句n;

    default:

语句n+1;

}

注意:

表达式不能为float类型

标号必须为常量

当表达式等于标号时,就冒号后面的语句,直到switch,case语句结束为止,或者遇到break语句结束。

switch,case语句是否结束)

是否遇到了break)

for循环

for(表达式1;表达式2;表达式3)

{

循环体;

}

表达式1:循环的起始条件

表达式2:循环的终止条件

表达式3:循环变量的变化

先执行表达式1,然后执行表达式2,如果表达式2为真,执行循环体,然后执行表达式3;如此反复,当表达式2为假时,结束循环

while语句

 

While(表达式)

{

循环体;

}

do..while语句

do

{

循环体;

}while(表达式)

先去执行循环体,然后判断表达式是否成立,如果成立,就继续去执行循环体内的语句,否则,结束循环

7、数组

7.1一维数组

概念

一组数据类型相同的元素组和在一起

特点:1、数据类型相同   2、地址连续

定义

存储类型  数据类型  变量名;

          Int     a;

存储类型  数据类型  数组名[ 元素的个数 ];

            Int    arr[5];

存储类型:auto、static、extern、register

数据类型:数组中元素的数据类型

数组的数据类型:int [5];

数据类型:去掉变量名,剩下的就是数据类型;

数组所占的内存空间的大小 = sizeof(数据类型)* 元素的个数

总结:

数组定义在函数体内,如果没有进行初始化,里面的所有元素是随机值(局部变量)

数组定义在函数体外,如果没有进行初始化,里面的所有元素为0(全局变量)

数组定义在函数体内,并且用static进行修饰,里面的所有元素为0(静态局部变量)

7.2二维数组

概念

数组:一堆数据类型相同的元素组和在一起

整形数组:一堆int类型的元素组合在一起

字符数组:一堆char类型的元素组合在一起

二维数组:(数组数组):一堆数组的元素组合在一起

元素为一维数组的一维数组

定义

存储类型  数据类型  数组名[元素的个数];

          Int  a[3];

//定义了一个有五个int类型元素的数组

数据类型:元素的数据类型

一维数组的数据类型:int[3];

定义一个二维数组:

存储类型  数据类型  数组名[行数][列数];

           Int   arr[4][3] ;

//保存了4个一维数组

行数:一维整型数组的个数

列数:一维整型数组中元素的个数

实际的元素的个数:行数*列数

内存空间的大小:sizeof(数据类型)*行数*列数

数据类型:数组最里面的元素的数据类型

7.3、字符数组

整型数组:保存一组int类型的数据

存储类型  数据类型 数组名[元素的个数];

数据类型:数组中元素的数据类型

          Int  arr[5];

字符数组:保存一组char类型的数据

存储类型  数据类型  数组名[元素的个数];

数据类型:数组中元素的数据类型

 定义: char  str[10];//定义了一个字符数组str,该数组中可以存放10个char类型的字符

数组所占的内存空间== sizeof(char)*10 = 10

数组的数据类型:char [10];//去掉数组名

Int: 10, 20, 30

Float:3.14   4.165

Char:‘a’ ‘b’

字符串:用什么保存?“hello” = ‘h’‘e’‘l’‘l’‘o’‘\0’

用字符数组来保存!

给字符数组清零:

7.4、二维字符数组

二维整形数组

定义一个二维整型数组:

存储类型  数据类型  数组名[行数][列数];

           Int   arr[4][3] ;

//数据类型:二维数组最里面的元素的数据类型

二维字符数组:

存储类型  数据类型  数组名[行数][列数];

            Char    str[3][10];

//相当于定义了一个二维数组str,数组中有3个元素,每个元素又是一个拥有10个char类型的一维数组

行数:字符串的个数(一维字符数组的个数)

列数:字符串最多可以保存几个字符(一维数组中元素的个数)

 

冒泡排序

56 12 34 78 66  ---------------------  12  34  56  66  78

思想:从左往右,两两依次比较,如果前一个数比后一个数大,就交换位置,反之,不变

 

8、指针

概念

指针是一种数据类型,它是一种保存地址的数据类型

Int是一种数据类型,它是一种保存整形数的数据类型

Char是一种数据类型,它是一种保存字符的数据类型

2、定义 

存储类型  数据类型 * 指针变量名;

           Int   * p;

//定义了一个指针变量p,p用是用来保存(谁的(int)地址)地址

数据类型:指针指向的数据类型(指针保存的是什么数据类型的变量的地址)

指针的数据类型:int *

 

注意:*和&互逆

二级指针

概念

Int *p; //用来保存int类型变量的地址  //整形指针

Char *p;//用来保存char类型变量的地址  //字符指针

Float *p;//用来保存float类型的变量的地址  //浮点型指针

保存一级指针的地址         //指针指针

定义

存储类型  数据类型  *指针变量名;

           Int * *pp;

数据类型:指针指向的数据类型;(二级指针指向的数据类型:一级指针的数据类型)

(int  *)

二级指针的数据类型:int **;

 

总结:

指针的数据类型,去掉变量名就是数据类型

Int *p;   // int *

Int **p;  //int **

Int ***p; // int ***

指针指向的数据类型,去掉的一个*和变量名,剩下的就是指针指向的数据类型

Int *p; // p指向的数据类型为int

Char *h;//h指向的数据类型char

Int **q;//q指向的数据类型为int *

Char **s;//s指向的数据类型为 char *

Int ***t;//t指向的数据类型 int **

3、指针所能访问到的内存空间的大小,由指向的数据类型决定

Char a = ‘b’;

Char *p = &a;//p能访问到的内存空间1字节  

int a;

Int *q = &a;//q能访问到的内内存空间的大小:4字节

Int **s ;

S = &q;//s所能访问到的内存空间的大小:4字节

4、

Int **p;

Int ** *q;

q = &p;

数组指针

2.1 概念

指向数组的指针

//保存数组的地址

2.2 定义

存储类型 数据类型 (* 变量名) [元素的个数];

         Int (*p)[3];

//定义了一个指向数组的指针p,指向的这个数组:有3个int类型的元素

存储类型:auto、static、extern、register

数组类型:指针指向的数组中的元素数据类型

P:数组指针的数据类型: int (*)[3];

p指向的数据类型:int [3]   //去掉变量名和一个*

p+1:移动sizeof(指向的数据类型) sizeof(int [3])

数组指针和一维数组的关系

 

 

指针数组和二维数组的关系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值