C语言学习入门 (七) 变量与函数,static和extern关键字

局部变量

1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。

2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

全局变量

1> 定义:在所有函数外部定义的变量,称为全局变量。

2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

变量的存储类型

C语言根据变量的存储类型(变量存储的位置:1. 运行时堆栈 2.普通内存 3.寄存器)的不同,

可以把变量分为:自动变量、静态变量、寄存器变量

> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,

基本上是废的,因为所有的局部变量在默认情况下都是自动变量。存在堆栈

> 哪些是静态变量: 存在内存,程序结束才销毁

  • 所有的全局变量都是静态变量
  • 被关键字static修饰的局部变量也是静态变量

> 哪些变量是寄存器变量:

  • 被关键字register修饰的自动变量都是寄存器变量
  • 只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
  • 寄存器变量只限于int、char和指针类型变量使用

extern与函数

  • 外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。
  • 内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。
    • C语言规定不同的源文件可以有同名的内部函数,并且互不干扰。

> extern修饰的函数就是外部函数,默认情况下,所有的函数就是外部函数        extern void one();   int two();

> 你想要把其他源文件中定义的外部函数拿过来声明,完整的做法,应该使用extern关键字,表示引用别人的"外部函数”:

extern void one();//需要 在 main() 之前引入,  这里的extern 也可以省略

static与函数

在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),

这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。

extern与全局变量

> 默认情况下,一个函数不可以访问在它后面定义的全局变量,若要使它可以访问 则:

extern int a; //extern是用来声明一个已经定义过的变量

void cc() { a = 7; }

int a = 9;

> 声明多个 相同的全局变量 ,表示的是同一个变量  如:

int a;

main() {};

int a;

int a;

> 在局部变量前 加extern

int a;

main()

{

extern int a;   //这还是全局变量那个 a

//int a;
   这是局部变量

}

>  假如在多个源文件中都有全局变量int a;,那么这些源文件的所有全局变量int a;都代表着同一个变量

使用方法 1:  1.c  int a   2.c  int a

2:  1.c  int a    2.c  extern int a

3:    1.c   extern  int a   2.c   int  a

4:   1.c    extern  int a    2.c   extern int a      这是错的,都声明,没有定义

static与全局变量

如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,

只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰

时间: 2024-12-24 14:21:35

C语言学习入门 (七) 变量与函数,static和extern关键字的相关文章

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变量的类型在变量名的后面.例如:不是,int a,而是 a int.当定义了一个变量,它默认赋值为其类型的 null 值.这意味着,在 var a int后,a 的 值为 0.而 var s string,意味着 s 被赋值为零长度字符串,也就是 "". 3.Go语言的变量声明和赋值 在Go中使

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----07 static和extern关键字、typedef

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.外部函数 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数 二.内部函数 内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函数.C语言规定不同的源文件可以有同名的内部函数,并且互不干扰. 三.static.extern与函数的总结 1.在定

19-C语言static和extern关键字2-对变量的作用

一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定义的变量a,这是完全没有问题的. 二.在C语言中,全局变量定义的位置是有限制的 默认情况下,一个函数不可以访问在它后面定义的全局变量 在第4行定义的main函数中尝试访问第9行定义的变量a,编译器直接报错了. 解决这个错误的话,有2种办法: 第1种办法:将变量a定义在main函数的前面 这样做编译器

18-C语言static和extern关键字1-对函数的作用

一.extern与函数 在第三讲和第四讲中,我提到过一句话:如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数.将这些相关联的目标文件链接在一起后才能生成可执行文件. 先来理解2个概念: 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数. 内部函数:如果在当前文件中定义的函数不允许其他文件访问

16-static和extern关键字2-对变量的作用

上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量也有作用,不过跟函数有点差别. C语言和Java都有全局变量的概念,但是它们的用法还是有些差别的. 一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定义的

15-static和extern关键字1-对函数的作用

一.extern与函数 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数.将这些相关联的目标文件链接在一起后才能生成可执行文件. 先来理解2个概念: 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数. 内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函

【黑马程序员】————static和extern关键字2-对变量的作用

C语言和Java都有全局变量的概念,但是它们的用法还是有些差别的. 一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定义的变量a,这是完全没有问题的. 二.在C语言中,全局变量定义的位置是有限制的 默认情况下,一个函数不可以访问在它后面定义的全局变量 在第4行定义的main函数中尝试访问第9行定义的变量a,编译器直接报错了. 解决这个错误的话,有2

【黑马程序员】————static和extern关键字1-对函数的作用

一.extern与函数 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数.将这些相关联的目标文件链接在一起后才能生成可执行文件. 先来理解2个概念: 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数. 内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函