C学习笔记20170821

来源:互联网 发布:应用物理学 知乎 编辑:程序博客网 时间:2024/06/05 03:48
一.局部变量与全局变量
1.局部变量
概念:定义在函数内部的变量是局部变量
生命周期:从代码块执行到定义的哪一行开始,到所在的代码块结束为止
2.全局变量
概念:定义在函数外部的变量 
定义:int num=90;
声明:int num;
特点:不可以重复定义 但可以重复声明 如果无定义只是声明 默认为0
生命周期:从程序启动开始到程序结束为止
二.结构体
1.构造类型:由已有的数据类型构成类型
数组:多个同种类型数据构成的一种类型 只能存一种类型
2.结构体:用来存放表示某种特定含义的一组数据(数据类型可同可不同)
结构体是对数据的封装 函数是对功能的封装
好处:提高代码的可读性 提高数据的易用性 提高代码维护性
3.定义结构体
struct 结构体类型名称
{
成员类型 程艳名称;
...
};
代码块:
//
struct Person
{
int age;
char sex;
char *name;
};
struct Person per;
per.age = 18;
三.结构体的初始化
除了上述还有:per = (struct Person){12, 'M', "xx"};
四.结构体定义的多种方式
1.
struct Person
{
int age;
char sex;
char *name;
} p1,p2;
2.
struct Person
{
int age;
char sex;
char *name;
} p1,p2={18,‘L’,"uu"};
3.匿名结构体
struct 
{
int age;
char sex;
char *name;
} p1,p2;
不支持整体赋值 结构体类型不能重复使用
五.结构体的作用域
在函数内部 相当于局部变量
在函数外部 向全局变量 但不能声明
六.结构体存储细节
1.结构体类型不占存储空间 结构体变量占存储空间
2.结构体变量地址 就是第一个成员的地址
3.对于相同数据类型的结构体所占有的存储空间为所有成员之和
4.为了快速访问数据 结构内部有一个补齐算法 默认情况下是占用内存最大成员的倍数
七.结构体数组
1.数组元素为结构体的为结构体数组
2.定义
//代码
struct Dog{
char *name;
int age;
};
struct Dog dogs[6];
八.结构体指针
1.指向结构体的指针
2.struct Person *per=&p;
九.结构体嵌套
1.结构体里声明结构成员
2.结构体不能嵌套自己
3.结构体可以嵌套自己的指针
十.结构体与函数
1.作为函数的参数 为值传递
2.数组为地址传递
3.结构体指针作为参数传递 为地址传递
4.结构体数组作为参数传递 地址传递
十一.枚举(enum)
1.一个一个的列举出来
2.枚举类型定义中,所有元素都是整形常量
3.枚举类型的本质就是整形
4.枚举类型成员默认是从0开始的 可以修改第一个成员
十二.不带参数的宏定义
1.源代码-编译预处理-编译-链接-运行
2.编译预处理指令:在编译前进行解析处理的指令
(1)不带参数的宏定义 #define
在预编译的时候所出现宏名标识的地方都会替换成宏后面的值
(2)条件编译
(3)文件包含
3.编译预处理指令
(1)所有的编译预处理指令是以#开头的
(2)所有的编译预处理指令都不需要分号
4.注意点
在注释中宏名不会被替换
在字符串出现的宏名不会被替换
5.#define LNE 10
十三.带参数的宏定义
1.出现宏名表达式地方都会把宏名小括号参数带入到宏后面的表达式中 然后替换
#define MAX(num1,num2) num1>num2?num1:num2;
2.参数列表中不包含类型 
3.带参数的宏和函数的区别
函数有一个调用的过程 会开辟储存空间 需要花费一些开销
宏仅仅是做了一个替换的作用
4.使用宏的场景
当计算比较简单 参数比较少的时候使用宏 提高运算效率
当逻辑比较复杂 参数多的时候使用函数
十四.条件编译
1.条件编译的条件只能由宏定义和常亮组成 不能出现变量
2.当条件满足的时候才会编译
3.代码
#define week 1;
#if week==1
print("xingqiyi");
#elif week==2
print("xingqier");
#else
    print("xingqisan");
#endif
4.判断一个宏定义是否存在
#ifdef 宏名
    //如果定义某个宏编译这个的语句
#endif
--------------------------
#ifndef 宏名
//如果没有定义某个宏编译这个语句
#endif
十五.static与extern关键字
1.static 对局部变量的作用
延长变量的生命周期 从第一次执行开始直到文件程序退出
不会改变局部变量的作用域
定义的这一行代码仅仅执行一次
2.extern
放在方法内部仅仅是对全局变量的声明
3.static 对全局变量的作用
全局变量:内部变量 外部变量 (仅能在文件中枫稳的变量为内部变量)(可以在所有文件中访问的变量)
static:声明或定义一个内部变量
extern:完整的声明和定义一个外部变量
全局变量默认都是extern
原创粉丝点击