黑马程序员——零基础学习iOS开发——07 全局变量、局部变量、static和extern关键字
2015-03-28 18:51
579 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
2> 作用域:从定义变量的那一行开始,一直到代码块结束
3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
4> 没有固定的初始值
2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)
3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
4> 默认的初始值就是0
2)在多个文件中,全局变量同样可以重复定义。
你在一个源文件中无论写多少遍全局变量int a;,它们代表的都是同一个变量。
假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int
a;都代表着同一个变量。
上面代码中,main函数第5行想访问第10行定义的全局变量a,编译器报错:找不到a的定义
解决这个错误,有两种办法:
第一种:在函数前面定义
第二种:extern声明变量a
当你想定义一个相当于私有的全局变量,那么你就得用static关键字来定义变量。
main.c文件中
这两个a不是同一个a。
内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件。
其实,函数前面什么都不写时,默认就是外部函数,所以extern可以省略。
这时就可以用static定义一个内部函数,这个函数可以和其他文件的中的函数重名
对变量的作用:
1.static
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
2.extern
extern可以用来声明一个全局变量,但是不能用来定义变量。extern可以省略。
对函数的作用:
1.static
》在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
》static也可以用来声明一个内部函数
2.extern
》在定义函数时,如果在函数的最左边加上关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。
》在一个文件中要调用其他文件中的外部函数,则需要在当前文件中用extern声明该外部函数,然后就可以使用,这里的extern也可以省略。
To be continue……
一、全局变量和局部变量
根据变量的作用域,可以分为:局部变量、全局变量
1.局部变量:
1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)2> 作用域:从定义变量的那一行开始,一直到代码块结束
3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
4> 没有固定的初始值
2.全局变量
1> 定义:在函数外面定义的变量2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)
3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
4> 默认的初始值就是0
3.全局变量和局部变量可以重名
下面这样写,是可以的。函数内部的a是局部变量,和外部的全局变量a没关系。#include <stdio.h> extern int a; // 这里只是全局变量a的声明 extern int a; // 可以多次声明 int main() { int a; // 这个a是个局部变量 a = 10; // 这里的a和第8行是同一个a return 0; } int a; // 这是一个全局变量,和第8、9行的a不是同一个a
4.全局变量可以重复定义
1)我们从下图可以看出,全局变量可以重复声明、重复定义,但不能重复定义且赋值你在一个源文件中无论写多少遍全局变量int a;,它们代表的都是同一个变量。
假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int
a;都代表着同一个变量。
二、static和extern关键字对变量的作用
1.extern声明全局变量
在C语言中,一个函数不可以访问在它后面定义的全局变量。上面代码中,main函数第5行想访问第10行定义的全局变量a,编译器报错:找不到a的定义
解决这个错误,有两种办法:
第一种:在函数前面定义
#include <stdio.h> // 第一种办法:在函数前面定义a int a; int main() { a = 10; return 0; }
第二种:extern声明变量a
#include <stdio.h> extern int a; // 这里只是a的声明 extern int a; // 这里只是a的声明,可以多次声明 int main() { a = 10; return 0; } int a;
2.static定义私有全局变量
但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享。当你想定义一个相当于私有的全局变量,那么你就得用static关键字来定义变量。
main.c文件中
int a;test.c文件中
static int a;这样写的效果是:main.c中的全局变量a是共有的,而test.c文件中的全局变量a是test.c私有的。
这两个a不是同一个a。
三、static和extern关键字对函数的作用
1.内部函数与外部函数
外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件。
2. extern声明、定义外部函数
#include <stdio.h> extern void test(); // 声明外部函数test int main() { return 0; } extern void test() // 定义外部函数test { printf("test"); }
其实,函数前面什么都不写时,默认就是外部函数,所以extern可以省略。
3. static声明、定义内部函数
有时候,我们可能想定义一个"内部函数”,也就是不想让其他文件访问本文件中定义的函数。这时就可以用static定义一个内部函数,这个函数可以和其他文件的中的函数重名
#include <stdio.h> static void test(); // 声明内部函数test int main() { return 0; } static void test() // 定义内部函数test { printf("test"); }
小结:
默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量对变量的作用:
1.static
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
2.extern
extern可以用来声明一个全局变量,但是不能用来定义变量。extern可以省略。
对函数的作用:
1.static
》在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
》static也可以用来声明一个内部函数
2.extern
》在定义函数时,如果在函数的最左边加上关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。
》在一个文件中要调用其他文件中的外部函数,则需要在当前文件中用extern声明该外部函数,然后就可以使用,这里的extern也可以省略。
To be continue……
相关文章推荐
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- 黑马程序员——零基础学习iOS开发——03 c语言基础语法:关键字、标示符、注释、数据结构、变量、变量内存分析、scanf函数
- 黑马程序员——c语言的全局变量和局部变量,static和extern,预处理指令
- 黑马程序员——C语言之全局变量和局部变量以及static和extern修饰符的作用
- 全局变量、局部变量与关键字static、extern的使用分析
- 小白学开发(iOS)基础C_static和extern对变量的作用(2015-07-20)
- 【IOS 开发学习总结-OC-7.2】C 语言特性——局部变量与全局变量
- 全局变量 局部变量和关键字static和extern的使用
- c语言中的全局变量,局部变量,static,extern
- JAVA基础第六天学习日记_static关键字、文档、静态代码块、单例开发模式
- 黑马程序员:java基础学习——标示符、关键字、保留字、常量与变量
- static作用(修饰函数、局部变量、全局变量) C/C++中static关键字详解
- 【零基础学习iOS开发】【02-C语言】03-关键字、标识符、注释
- 【零基础学习iOS开发】【02-C语言】04-常量、变量
- 【零基础学习iOS开发】【02-C语言】06-变量与内存
- 【零基础学习iOS开发】【02-C语言】07-基本数据类型
- IOS总结 静变量static、全局变量extern、局部变量、实例变量
- ios开发使用extern访问全局变量
- IOS总结 静变量static、全局变量extern、局部变量、实例变量
- 黑马程序员--ios基础--c语言--预处理指令、typedef、static和extern、递归