C

常见的C程序:

基本数据类型:char(1个字节8Bit)  short(2个字节)  int(4个字节)  long(32位4个字节64位8字节)  float(4个字节)double(8个字节)enum(枚举)union(联合)struct(结构体)void(1个字节)10个

存储类型:auto (栈区) register(寄存器) static(静态区) extern(引用一个来自于外部文件(前提:同一个工程)的一个全局变量或者函数进来使用。)

控制语句:if  else  switch  case  default  break  continue  for  while  do  goto  11个

类型修饰符: const  volatile(底层ARM的时候会看到:可以防止编译器进行优化)

其他:signed  unsigned    return   sizeof  typedef   5个

输入输出:

第一类:标准的输入输出函数: 意味着对于数据类型没有任何的限制

第二类:字符的输入输出函数: 意味着只能完成字符间的输入和输出

printf() 标准输出函数

printf(“%-m.nf”,a);  m控制宽度;n控制精度;默认右对齐,加 - 表示左对齐

强制转换:范围大----->范围小  (int)f; 将f强制转换为int

隐式转换:范围小----->范围大  int +float ----->float

占位符:

整形:%d 短整型:%hd 长整型:%ld 字符型: %c

字符串:%s 单精度:%f 双精度:%lf 地址:%p

按照最短的长度打印输出: %g

输入函数:

getchar(void);从键盘获得一个字符  返回值:获得到的字符对应的ASCII值

gets:获得一个字符串,只有遇到’\n’即回车才代表输入完成,没有越界检查的功能

scanf:获得一个字符串,但是遇到空格,回车,Tab建均代表输入完成。要是想要获得一个带有空格的字符串:scanf(“%[^\n]”,数组名);

                      puts(数组名);

输出函数:

putchar(int c);输出一个字符到终端

puts(数组名);输出一个字符串,遇到’\0’结束标志就会停止打印,并且将’\0’会替换为’\n’进行显示在终端上。

printf:输出一个字符串,遇到’\0’停止打印,但是此时什么也不做了。

如何解决多个字符的输入赋值问题?

加逗号,加空格,还可以通过getchar()函数来获得一个字符不回显。

通过抑制符*也可以完成多个字符之间胡乱赋值的情况:字符:%*c 整形:%*d

运算符

  1. 算术运算符:

+ - * / % ++ --

  1. 逻辑运算符:

&&(与) ||(或) !(非)

0 && 1 = 0 1 || 0 = 1

截断法则:当出现1 && 2 或1 || 2时,&&:1为假时,2不执行;||:1为真时,2不执行。

  1. 关系运算符:

 >    <  ==  !=

  1. 位运算符:

&  |  ~  ^  <<  >>  

按位与:& &0得0;&1不变

按位或:| &1得1;&0不变

取反:~ 每一位都取相反的位

异或:^ 相同为0,不同为1

左移:<< 有符号数:正数:高位丢弃,低位补0;负数:高位丢弃,低位补0

          无符号数:高位丢弃,低位补0

右移:>> 有符号数:正数:低位丢弃,高位补0;负数:低位丢弃,高位补1

无符号数:低位丢弃,高位补0

  1. 赋值运算符 =
  2. 逗号运算符:从左到右,依次执行,并将最后一个表达式的结果作为整个逗号运算符的结果。
  3. 三目运算符:1?2:3   1真执行2,1假执行3;2和3的值为返回值
  4. sizeof运算符:测试对象所占字节数的大小 sizeof(类型/变量名);

有符号数:signed  char :

          1000 0000  ~ 0111 1111 (-128 ~ 127)

无符号数:unsigned  char:

          0000 0000  ~ 1111 1111  (0 ~ 255)

局部/全局变量

局部变量:只要在{}内部的都是局部变量。从定义开始,到距离它最近的}结束。

全局变量:在{}外面定义的变量都是全局变量。从定义来开始,到源程序结束。

局部变量和全局变量重名时,如果局部变量的生命周期还未结束,则会优先使用局部变量的值。

被static修饰的局部变量:从定义开始,到程序终止。距离它最近的模块{}内有效。

被static修饰的全局变量:从定义开始,到源程序结束。只在当前文件内有效。

常量:其值在程序运行期间不可以被改变的数据

宏常量:宏是一种替换

格式:  #define 宏名 值/表达式 #define N 10; #define X(m,n) m * n;(宏名建议大写)

宏是一种替换,在宏替换之前不需进行任何的运算。为了保证定义的宏绝大多数情况下符合我们的初衷,因此建议给每一个宏的参数以及宏的每一个表达式都加上括号。

循环结构

for(开始时执行1;真/假;每次循环完执行3) { }

while (真/假) {}

break;跳出循环  

continue;结束本次循环

选择结构

If(真/假){} else If(真/假){}  else{}

switch(整形/常量/表达式)

{

case 1:{break;}

case 2:{break;}

...

default: {break;}

}

do{ }while(真/假);

数组

内存连续、类型相同

字符数组:

1.定义格式:存储类型   数据类型  数组名[元素个数];

2.字符数组的本质:字符串

3.字符串结束标志‘\0’,没有’\0’就会造成在打印字符串的时候无限打印,直到遇到第一个’\0’截止输出。

4.给字符数组赋值

char str[20] = {‘h’,’e’,’l’,’l’,’o’}; //不建议使用

char str[20] = {“hello”}; //居多

char str[20] = “hello”;  

赋值字符串时,以单引号引没有赋值’\0’就没有;但是双引号引起来会自带一个’\0’。

二维数组的类型是一个数组指针类型(int (*)[3])

指针数组

数据类型:指针数组中每一个元素所指向的数据类型。

数据类型 *:指针数组中每一个元素的数据类型

数组名:一片连续空间的名字,见名知意

strlen:获得字符串长度(遇到\0停止)

字符串的拷贝。

strcpy:将字符串2写入字符串1,返回值为1首地址

strncpy:从字符串2中拷贝指定个数字符到符串1中。参数3:个数。数返回值为1首地址。

字符串的连接。

strcat:将字符串2连接至字符串1后,返回值:连接成功之后目的字符串的地址

strncat:将字符串2前N个字符的连接至字符串1后。参数3:个数。返回值1的首地址。

字符串的比较。

先拿出str1和str2中第一个字符进行比较,不相等则立即返回*str1 - *str2(差值),若相等则需要判断是否等于’\0’,若为’\0’两个字符串相等,否则比较下一对字符,重复以上动作。

strcmp:两个字符串比较

strncmp:两个字符串中前N个的比较,参数3为N

指针

&:取址运算符(可以通过该字符获得变量在内存中的地址)

*:取值运算符(可以通过该符号获得指针所指空间的内容)

在32位下:指针占4个字节空间。在64OS下:指针占8个字节空间

二级指针:用来存储一级指针的地址

int **pp;

pp的类型:int **

pp所指向的类型:int *

pp所指向的指向类型:int

char **qq;

sizeof(qq) = 4

sizeof(*qq) = 4

sizeof(**qq) = 1

空指针:值为0的指针,只能作为初始化来使用

野指针:随机值,当查看就会段错误

段错误在C语言中出现的原因:

  1. 数组越界
  2. 访问了不该访问的空间(空指针或者野指针)
  3. 修改了常量区的内容

函数体

为了将功能单一的代码进行模块化编程,提高代码的复用率。

定义格式:

存储类型  返回值类型  函数名 (数据类型1  形参名1,数据类型2  形参名2........);

{

函数体;//代码的实现过程

return 返回值;

}

递归函数

自己调用自己的一种方式,但是需要注意结束的标志,如果无法结束,就会进入死递归。

枚举

作为错误码使用居多

enum  枚举名

{

常量1,

常量2,

常量N

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻风.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值