程序员——C语言之结构体、枚举、预处理和static,extern关键字 易错知识点
2015-05-20 18:44
295 查看
1. 结构体
定义:1.定义结构体类型
struct 结构体类型名
{
属性1类型:属性1名;
属性2类型:属性2名;
……
};(注意定义结构体时后面有分号。)
2. 根据结构体类型,定义结构体变量
struct 结构体类型名结构体名={对应的结构体属性值}
定义时各属性用分号隔开,赋值时各对应值用逗号隔开。
地址分配
数组和结构体的区别:
数组:只能由多个相同类型的数据构成
结构体:可以由多个不同类型的数据构成一个整体
结构体变量的多种定义方式
结构体数组
结构体---指向结构体的指针
1. 指向结构体的指针的定义struct Student *p;
2. 利用指针访问结构体的成员
1> (*p).成员变量
2> p->成员名称
注意有()括号 (*p).成员变量名
结构体-----嵌套
2. 数据类型:枚举
当变量有固定取值时,如星期、季节等,可以用枚举。//定义枚举类型 enum Season { spring, summer, autumn, winter }; //定义枚举变量 enum Season s = winter;
枚举类型定义的变量其实是整型变量0、1、2、3……
3. 数据类型总结
一、基本数据类型1. int
1> long int、 long : 8个字节 %ld
2> short int、 short : 2个字节 %d 也可以用%i
3> unsigned int、unsigned :4个字节
%zd
4> signed int、signed、int :4个字节 %d %i
2. float\double
1> float : 4个字节 %f
2> double : 8个字节 %f
3. char
1> 1个字节 %c %d(%d是打印出的ASCII码值)
2> char类型保存在内存中的是她的ASCII值
‘A’ --> 65
二、构造类型
1. 数组
1> 只能由同一种类型的数据组成
2> 定义:数据类型 数组名[元素个数]
2. 结构体
1> 可以由不同类型的数据组成
2> 先定义类型、再利用类型定义变量
三、指针类型
1. 变量的定义
int *p
2. 间接操作变量的值
int a = 10;
p = &a;
*p = 20;
四、枚举类型
使用场合:当一个变量的取值只允许有固定的取值时,采用枚举最佳。
4. 预处理
1. 所有的预处理指令都是以#开头2. 预处理指令分3种
1> 宏定义
2> 条件编译
3> 文件包含
3. 预处理指令在代码翻译成0和1之前执行。
4. 预处理的位置是随便写的
5. 预处理指令的作用域:从编写指令的那一行开始一直到文件结尾。
1. 宏定义
宏名一般用大写或者以小写k开头,变量名一般用小写。结束宏定义可以用 #undef COUNT表示。
#define COUNT 4 意即把左边纯文本形式替换成右边
1.不带参数的宏
2.带参数的宏定义
宏定义只是文本替换,发生在翻译之前所以,带参数的宏定义效率比函数高。
2. 条件编译
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行(注意:是编译进去,不是执行,很平时用的if-else是不一样的)),这就是条件编译。基本用法
#if 条件1 ...code1... #elif 条件2 ...code2... #else ...code3... #endif
#if后面必须有#endif收尾!否则后面的代码都包含在条件里。
#ifdef的使用和#if defined()的用法基本一致两者等价
#ifndef又和#if !defined()的用法基本一致
用来判断是否定义过某个宏,如
#if defined(MAX) ...code... #endif
如果前面已经定义过MAX这个宏(如有#defined
MAX 10),就将code编译进去。它不会管MAX的值是多少,只要定义过MAX,条件就成立。
3. 文件包含
#include,它可以将一个文件的全部内容拷贝另一个文件中。使用#include指令可能导致多次包含同一个头文件,降低编译效率。
为了解决这种重复包含同一个头文件的问题,一般我们会这样写头文件内容:
主要是在 .h文件中,声明函数时用到。用条件编译时一般用.h文件名大写作为条件
5.typedef关键字
使用typedef关键字为各种数据类型定义一个新名字(别名)。1. typedef与指针
2. typedef 与结构体
给结构体起别名,可以使代码更加简洁3. typedef 与指向结构体的指针
4. typedef 与枚举类型
5. typedef 与 指向函数的指针
6. typedef 与 #define
不同之处
经过typedef处理后,String1也算是一种数据类型,所以第3行代码相当于
String1 str1; String1 str2;
由于String1就是char *,所以上面的两行代码等于
char *str1; char*str2;
因为宏定义纯粹是字符串替换,用char *代替String2,所以第3行代码相当于
char *str3, str4;
其实也就相当于:
char * str3; char str4;
所以,以后给类型起别名,最好使用typedef,而不是使用#define
6 static 和 extern 关键字
1. 对函数的作用
extern两个作用,1.定义外部函数。2.声明外部函数。(extern可忽略)。static用于定义和声明内部函数(又叫静态函数)。
内部函数不可被外部函数访问,可以被间接访问(内部函数先被同文件下的外部函数调用,然后其他文件再调用该外部函数,即可)
2-对变量的作用
1. 对全局变量
1.很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于私有的全局变量,那么你就得用static关键字来定义变量。即用static定义全局变量,则该变量仅能在该源文件里全局使用。定义内部变量2.extern,对全局变量只能用来声明。
2.对局部变量
7.递归思想
递归的2个条件:1. 函数自己调用自己
2. 必须有个明确的返回值,当条件成立时来终止该函数。
相关文章推荐
- 黑马程序员--c语言:结构体、枚举、预处理指令、typedef、static与extern、递归思想
- C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- 黑马程序员——C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- C语言回顾之结构体、枚举、宏定义、typedef、extern和static的使用
- C语言学习入门 (七) 变量与函数,static和extern关键字
- C语言中关键字auto、static、register、const、volatile、extern的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- c语言中static和extern关键字
- C语言中关键字作用(const和static和extern)
- C语言的存储类型和关键字extern、static
- 【C语言】19-static和extern关键字1-对函数的作用
- c语言常用关键字 static,const,extern...
- C语言-static和extern关键字1-对函数的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言数据类型总结,预处理指令,typedef,static&extern,递归笔记
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言 static和extern关键字 对函数的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- C语言中的extern和static关键字详解