c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点...

1.   结构体

定义:

1.定义结构体类型

struct 结构体类型名

{

属性1类型:属性1名;

属性2类型:属性2名;

……

};(注意定义结构体时后面有分号。)

2. 根据结构体类型,定义结构体变量

struct 结构体类型名结构体名={对应的结构体属性值}

定义时各属性用分号隔开,赋值时各对应值用逗号隔开。

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第1张图片

地址分配

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第2张图片c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第3张图片c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第4张图片

数组和结构体的区别:

数组:只能由多个相同类型的数据构成

结构体:可以由多个不同类型的数据构成一个整体

结构体变量的多种定义方式

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第5张图片

结构体数组

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第6张图片

结构体---指向结构体的指针

1. 指向结构体的指针的定义

struct Student *p;

2. 利用指针访问结构体的成员

1>  (*p).成员变量

2>  p->成员名称

注意有()括号 (*p).成员变量名

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第7张图片

结构体-----嵌套

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第8张图片

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.不带参数的宏

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第9张图片

2.带参数的宏定义

宏定义只是文本替换,发生在翻译之前

所以,带参数的宏定义效率比函数高。

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第10张图片

2.   条件编译

在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行(注意:是编译进去,不是执行,很平时用的if-else是不一样的)),这就是条件编译。

基本用法

#if 条件1

...code1...

#elif 条件2

...code2...

#else

...code3...

#endif

#if后面必须有#endif收尾!否则后面的代码都包含在条件里。

#ifdef的使用和#ifdefined()的用法基本一致两者等价

#ifndef又和#if!defined()的用法基本一致

用来判断是否定义过某个宏,如

#if defined(MAX)

...code...

#endif

如果前面已经定义过MAX这个宏(如有#defined MAX 10),就将code编译进去。它不会管MAX的值是多少,只要定义过MAX,条件就成立。

3.   文件包含

#include,它可以将一个文件的全部内容拷贝另一个文件中。

使用#include指令可能导致多次包含同一个头文件,降低编译效率。

为了解决这种重复包含同一个头文件的问题,一般我们会这样写头文件内容:

主要是在.h文件中,声明函数时用到。用条件编译时一般用.h文件名大写作为条件

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第11张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第12张图片

5.typedef关键字

使用typedef关键字为各种数据类型定义一个新名字(别名)。

1.   typedef与指针

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第13张图片

2.  typedef 与结构体

给结构体起别名,可以使代码更加简洁

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第14张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第15张图片

3.      typedef 与指向结构体的指针

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第16张图片

4.      typedef 与枚举类型

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第17张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第18张图片

5.      typedef 与 指向函数的指针

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第19张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第20张图片

6.      typedef 与 #define

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第21张图片

不同之处

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第22张图片

经过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用于定义和声明内部函数(又叫静态函数)。

内部函数不可被外部函数访问,可以被间接访问(内部函数先被同文件下的外部函数调用,然后其他文件再调用该外部函数,即可)

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第23张图片

2-对变量的作用

1. 对全局变量

1.很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于私有的全局变量,那么你就得用static关键字来定义变量。即用static定义全局变量,则该变量仅能在该源文件里全局使用。定义内部变量

2.extern,对全局变量只能用来声明。

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第24张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第25张图片

2.对局部变量

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第26张图片

7.递归思想

递归的2个条件:

1.函数自己调用自己

2.必须有个明确的返回值,当条件成立时来终止该函数。

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第27张图片

c语言static extern作用,C语言之结构体、枚举、预处理和static,extern关键字 易错知识点..._第28张图片

你可能感兴趣的:(c语言static,extern作用)