黑马程序员技术交流社区
标题:
static的用法
[打印本页]
作者:
shicuf
时间:
2014-12-22 00:21
标题:
static的用法
这块能不能明白人来总结一下?
作者:
。烊了
时间:
2014-12-22 10:03
对于C语言的static,我只掌握了 隐藏全局变量、隐藏函数、只分配一次内存的用法。其余就不知道了
作者:
木子小静
时间:
2014-12-22 10:16
本帖最后由 木子小静 于 2014-12-22 10:18 编辑
static 修饰内部函数,定义的函数只能被本文件访问,其他文件不能访问,允许不同文件中有同名的内部函数,作用:1、定义内部函数2、声明函数
static 修饰局部变量,定义的变量只能被本文件访问,不能被其他文件访问,且不同文件中的同名内部变量互不影响,作用:1、延长局部变量的生命周期,程序结束时才会被销毁。2、作用域不更改。使用场合:1、如果某个哈书的调用频率很高。2、函数内部的某个变量值是固定不变的
怎么获得技术分啊,求指教~
作者:
sajiner2
时间:
2014-12-22 10:25
static对变量的作用: 定义一个内部变量
作者:
shicuf
时间:
2014-12-22 10:30
木子小静 发表于 2014-12-22 10:16
static 修饰内部函数,定义的函数只能被本文件访问,其他文件不能访问,允许不同文件中有同名的内部函数, ...
发帖和评论赚黑马币,然后兑换!
作者:
wangxiaoit
时间:
2014-12-22 14:21
1. hello.c 文件
#include<stdio.h>
int a=1; //在其他文件中 通过声明 extern int a; 可以引用此全局变量 a
//static int a = 1; -->用 static 修饰的全局变量在其他文件中不可以 引用
extern void hello() //在其他.c 文件中 通过声明 extern void hello(); 可以调用此函数 等同于 extern void hello()
//static void hello() --> 用 static 修饰的 函数 在其他文件中 不可以调用
{
printf("hello world!\n");
printf("a = %d\n",a);
a++;
}
复制代码
2. main.c 文件
#include<stdio.h>
#include<stdlib.h>
extern void hello(); // 此声明说明 hello(); 函数定义在其他文件中
extern int a; //此声明说明 a 全局变量 定义在其他文件中
void test();
void main()
{
hello(); //调用外部函数
hello();
printf("a of main = %d\n",a);
printf("==============\n");
test();
test();
}
void test()
{
static int q; //函数第一次调用时创建 只初始化一次 程序结束时释放。但作用域仅局限于此函数
static int *d = NULL;
if(d == NULL)
d = (int *)malloc(sizeof(int));
//int *d = (int *)malloc(sizeof(int));
printf("in test q=%d\n",q);
printf("in test d=%d addr=%x\n",*d,&d);
q++;
*d = *d +1;
}
复制代码
Linux下的 简单的小程序,可以测试一下。
简单的说 : 修饰变量 和 修饰 函数
1、修饰函数
static 修饰的函数 称为 内部函数 只能被文件中的函数调用 ,在必要的时候使用可以降低函数间的耦合性。
extern 修饰 或者 无修饰符的函数 称为 外部函数 就是可以被其他文件调用的函数。但在调用前必须用 extern void funcname(void); 声明 。
2、修饰变量
a. 修饰全局变量时 与修饰函数类似
b. 修饰局部变量时 局部变量在 第一次调用函数时创建,并只初始化一次。变量不会随函数调用结束而释放,而是随程序结束而释放。但注意,变量作用域只局限于此函数,不能被其他函数调用。
只知道这些了,还有什么不全的请补充,如果有错误的地方请指教。3Q
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2