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

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一、进制

1.1、默认情况下为十进制

int number = 1010;

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

int number = 0b1100;

1.3、八进制(以0开头)

int number = 014

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

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>基本数据类型

typedef int MyInt;

2>指针

typedef char * String;

3>结构体

typedef struct
{
    int year;

    int month;

    int day;

} Date;

4>枚举

typedef enum
{
    SexMan;

    SexWoman

} Sex;

5>指向函数的指针

int sum(int a, int b)
{
    return a + b;
}
typedef int (*Mypoint)(int, int);

6>指向结构体的指针

typedef struct Person
{
    int age;

} * PersonPoint;

struct Person p = {20};

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>所有的函数都共享一个变量
例如:

test()
{
      static int a = 0;
      int b = 0;
      printf("a = %d,b = %d", a++,b++);
}

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

使用场合:

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


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

int myPow(int a, int n)\\n代表平方
{
    if(n <= 0) return 1;
    return myPow(a, n-1) * a;
}


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

temp = a;
a = b;
b = temp;

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

a = b - a;
b = b - a;
a = b + a;

加法:

a = a + b;
b = a - b;
a = a - b;

异或(^):

a = a ^ b;
b = a ^ b;
a = a ^ b;




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

 

你可能感兴趣的:(黑马程序员_iOS学习笔记)