A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 布鲁兹老爷 中级黑马   /  2015-10-14 01:20  /  786 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1、对函数有效
2、对变量有效

一、对函数的作用

函数的分类
外部函数:
1、定义的函数能本文件和其他文件访问(默认情况下,所有的函数都是外部函数)
2、extern的作用 完整的定义外部函数和完整的声明外部函数
3、不可以在多文件中定义多个同名的的外部函数

内部函数:
1、定义的函数智能本本文件访问。
2、static的作用是定义内部函数和声明内部函数
3、允许不同文件中有同名的内部函数。

下面3个文件
1、main.c文件
#include <stdio.h>
#include "test.h"
int main()
{
    test();
    return 0;
}
2、test.h文件
#ifndef_TEST_H_
#define_TEST_H_
//完整的声明外部函数,加上extern
//因为默认所有的函数都是外部函数,所以extern可以省略
extern void test();
#endif
3、test.c文件
#include <stdio.h>

//完整的声明内部函数
static voidtest2();

//加上extern才是完整的定义外部函数
//因为默认所有的函数都是外部函数,所以extern可以省略
extern void test()
{
   printf("调用了test函数\n");
    test2();
}

//定义内部函数,必须加static
static void test2()
{
    printf("调用了test2内部函数\n");
}
main.c文件可以通过包含了test.h文件,可以直接调用test()函数,但是因为test2()是test.c中的内部函数,所以main文件不能直接调用它,但是可以通过test()函数间接的调用它。

对全局变量的作用

全局变量分2种
外部变量:
1、定义的变量能被本文件和其他文件访问。
2、默认所有全局变量都是外部变量。
3、多文件中,所有同名的外部全局变量都是一个地址,都是同一个变量。
内部变量:用static
1、定义内部变量只能被本文件访问,不能被其他文件访问。
2、内部全局变量要加上static
3、不同文件中的同名的内部变量互不影响。

extern对变量的作用只有一个,类似于函数声明
你可以把变量定义在文件的结尾,然后在文件的开头写一个extern声明,也可以在函数中声明,不过要在使用它以前声明,否则会编译错误。
extern int a;

注意,即使你在一个文件里声明了外部变量a,在其他文件中想把a的定义放到文件最后,也要在文件开头使用extern来声明变量。

比如
1、main.c文件
#include <stdio.h>
#include "test.h"
//定义外部变量
int a;
//定义内部变量
static int b;
//声明一个变量
extern int c;
int main()
{
    a = 10;
    b = 22;
    c = 44;
    test();

    printf("a= %d, b = %d, c = %d\n",a, b, c);
    return 0;
}
//定义外部变量
int c;

2、test.h文件省略
3、test.c文件
#include <stdio.h>

//定义外部变量
int a;
//定义内部变量
static int b;
//声明一个变量
extern int c;

extern void test()
{
    printf("a= %d,b = %d, c = %d\n",a, b, c);
    a = 20;
    c = 66;

}
//定义外部变量
int c;

输出结果为:
a = 10,b =0, c = 44
a = 20, b =22, c = 66


static对局部变量的影响:
1、默认情况下函数内部的局部变量在函数调用完就会销毁。
2、如果给局部变量一个static ,那么会延长他的生命周期。知道程序结束。
如果有个函数调用频率特别高,并且有个变量是不变的,这里我们最好把它设定为static。免去了每次都要分配内存和销毁的步骤。。

4 个回复

正序浏览
黑马公公007 发表于 2015-10-14 09:16
虽然字体一会大一会小的,但是总结的到位的哈

one note就这样啊,设置好字体,打打字又变回去了,改字体改的头疼。
回复 使用道具 举报
不错,加油!
回复 使用道具 举报
虽然字体一会大一会小的,但是总结的到位的哈
回复 使用道具 举报
你的笔记记得好详细,拿走了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马