黑马程序员_C语言01_基础总结

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

一、进制

1.1、默认情况下为十进制

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int number = 1010;  

1.2、二进制(以0b或0B开头)

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int number = 0b1100;  

1.3、八进制(以0开头)

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int number = 014  

1.4、十六进制(以0x或0X开头)

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int number = 0xc  

二、格式符

%d   十进制有符号整数
%ld  long int
%lld long long int
%u   十进制无符号整数
%f    浮点数
%s   字符串
%c   单个字符
%p   指针的值(地址)
%e   指数形式的浮点数
%x   无符号以十六进制表示的整数
%o   无符号以八进制表示的整数
%g   自动选择合适的表示法
\n     换行
\r      回车
\t      Tab符
%%  输出%
\\       输出\

 

三、存储空间(64位编译器)

1个字节 = 8bit


char 1个字节

int 4字节

float 4个字节

double 8个字节

short 2个字节

long 8个字节

long long 8个字节

指针 8个字节

四、位运算符

4.1、按位与(&)

功能:只有对应的两个二进位均为1时,结果位才为1,否则为0

tips: 二进制中,与1相&就保持原位,与0相&就为0,所以可以用下面这个代码判断奇偶性

a&1?printf("a是奇数"):printf("a是偶数"); 

4.2、按位或(|)

功能:只要对应的两个二进位有一个为1时,结果位就为1,否则为0。

4.3、按位异或(^)

功能:当对应的二进位相异(不相同)时,结果为1,否则为0。

tips:相同正数异或为0,异或没有顺序,所以可以得出a^b^a=b

4.4、取反(~)

功能:对整数a的各二进位进行取反,符号位也取反(0变1,1变0)

4.5、左移(<<)

功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

tips:有可能改变正负性

4.6、右移(>>)

功能:把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方

tips:正数高位补0,负数补0或1取决于编译器

 

五、预处理指令

5.1注意点:
5.1.1、所有预处理指令都是#开头的

5.1.2、预处理指令分为3种

     5.2.1>宏定义

     5.2.2>条件编译

     5.2.3>文件包含

5.1.3、预处理指令包含翻译成0和1之前执行

5.1.4、预处理指令的位置是随便写的

5.1.5、预处理指令的作用域,从编译那行到文件结束

5.1.6、宏名一般用大写,变量名一般用小写


5.2宏定义

#define 宏名 值

在代码中间加入#undef 后,宏将被取消

带参数的宏 #define sum(a,b) a+b,只负责代码转化不负责运算

 

5.3条件编译

#if()语句;

#elif()语句;

#else()语句;

#endif()语句;

 

5.4typedef

5.4.1作用:给已存在的类型定义一个新的类名

5.4.2使用场合:
1>基本数据类型

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef int MyInt;  

2>指针

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef charchar * String;  

3>结构体

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef struct  
  2. {  
  3.     int year;  
  4.   
  5.     int month;  
  6.   
  7.     int day;  
  8.   
  9. } Date;  

4>枚举

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef enum  
  2. {  
  3.     SexMan;  
  4.   
  5.     SexWoman  
  6.   
  7. } Sex;  

5>指向函数的指针

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int sum(int a, int b)  
  2. {  
  3.     return a + b;  
  4. }  
  5. typedef int (*Mypoint)(intint);  

6>指向结构体的指针

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef struct Person  
  2. {  
  3.     int age;  
  4.   
  5. } * PersonPoint;  
  6.   
  7. struct Person p = {20};  
  8.   
  9. PersonPoint p2 = &p;  

5.5static和extern
可作用于函数和变量


5.5.1.作用于函数

static作用:

1>定义一个内部函数

2>声明一个内部函数

extern作用:

1>完整的定义一个外部函数

2>完整的声明一个外部函数(extern可以省略,默认的情况下定义的函数都是外部函数)
tips:

外部函数:定义的函数能被本文件和其它文件进行访问(默认的情况下所有函数都是外部函数)不允许有同名的外部函数
内部函数:定义的函数只能被本文件访问,其它文件不能访问,允许不同文件中有同名的内部函数


5.5.2.作用于变量
extern作用:声明一个外部变量
static作用:定义一个内部变量

5.5.2.1全局变量

外部变量:定义的变量能被本文件和其它文件访问
1>默认情况下,所有全局变量都是外部变量
2>不同文件中的同名外部变量代表同一个变量

内部变量:定义的变量只能被本文件访问,不能被其它文件访问
1>不同文件中同名的内部变量互不影响

5.5.2.2局部变量:
static作用:

1>延长局部变量的生命周期,程序结束的时候才会被销毁

2>并没有改变局部变量的作用域

3>所有的函数都共享一个变量
例如:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. test()  
  2. {  
  3.       static int a = 0;  
  4.       int b = 0;  
  5.       printf("a = %d,b = %d", a++,b++);  
  6. }  

这个test函数每调用一次,a的值就会加1,而b的值则不会改变。

使用场合:

如果某个函数的调用频率特别高且这个函数内部的某个变量值是固定不变的
例如:计算一百次圆周长时的π,就可以定义为static局部变量


六、递归
使用递归需满足两个条件:
6.1、函数自己调用自己
6.2、必须有个明确的返回值,即当达到某种条件时,不再调用函数,否则将成为死循环
例:计算一个数的平方(不考虑负数平方)

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int myPow(int a, int n)\\n代表平方  
  2. {  
  3.     if(n <= 0return 1;  
  4.     return myPow(a, n-1) * a;  
  5. }  


七、两个数互换(两种方法)
7.1、使用第三方变量

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. temp = a;  
  2. a = b;  
  3. b = temp;  

7.2、不使用第三方变量(加减法)
减法:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. a = b - a;  
  2. b = b - a;  
  3. a = b + a;  

加法:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. a = a + b;  
  2. b = a - b;  
  3. a = a - b;  

异或(^):

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. a = a ^ b;  
  2. b = a ^ b;  
  3. a = a ^ b;  




---------------------- <a target="blank">ASP.Net+Android+IOS开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值