c 语言的 static
来源:互联网 发布:潮牌顶级复刻的淘宝店 编辑:程序博客网 时间:2024/05/21 17:36
c语言中static关键字有两个作用,一是文件作用域,二是函数作用域。
一、文件作用域
文件作用域关键字static的作用是,以static申明的全局变量、函数不得被其他文件所引用,例如:
//这是mystr.c文件的内容
#include <string.h>
static int num = 10;
int mynum = 100;
static int str_len(char *str)
{
return strlen(str);
}
int mystr_len(char *str)
{
return str_len(str) + num;
}
当你mystr.c文件中的str_len函数加上了static关键字,你便不能在其他的地方复用这个函数,譬如,你不能这样写:
//这是main.c 的内容
#include <stdio.h>
int main()
{
int len;
len = str_len("hello, world/n");
printf("%d %d/n", num, len )
return 0;
}
gcc main.c mystr_len.c
将不能编译通过,因为mystr.c中的num变量和str_len函数都用了static关键字,导致他们只能在mystr.c中被使用,如文件中的mystr_len函数可以引用num变量和str_len函数。
//这是main.c 的内容
#include <stdio.h>
int main()
{
int len;
len = mystr_len("hello, world/n");
printf("%d %d/n", my_num, len )
return 0;
}
当不用static关键字时,等同于extern,即
int mystr_len(char *str)
{
return str_len(str) + num;
}
和
extern int mystr_len(char *str)
{
return str_len(str) + num;
}
是一样的。
二、函数作用域
static另外一个用途是函数内部静态变量,最常用的情况是
int *test()
{
int num = 100;
int *ptr = #
return ptr;
}
int main()
{
printf("%d/n", *test);
return 0;
}
该函数返回整数num的指针,在main函数中打印*test将会出现段错误,因为num做为test函数内部,只能在test内部被访问。以下程序是正确的。
int *test()
{
static int num = 100;
int *ptr = #
return ptr;
}
int main()
{
printf("%d/n", *test);
return 0;
}
该程序中num变量加了关键字static,函数运行结束后,依然可以在其他地方被引用,只是不能直接通过变量名访问,而要间接通过指针访问,原因是 static变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量,只是其他地方只能通过指针来访问,而不能直接通过变量名访问。
一、文件作用域
文件作用域关键字static的作用是,以static申明的全局变量、函数不得被其他文件所引用,例如:
//这是mystr.c文件的内容
#include <string.h>
static int num = 10;
int mynum = 100;
static int str_len(char *str)
{
return strlen(str);
}
int mystr_len(char *str)
{
return str_len(str) + num;
}
当你mystr.c文件中的str_len函数加上了static关键字,你便不能在其他的地方复用这个函数,譬如,你不能这样写:
//这是main.c 的内容
#include <stdio.h>
int main()
{
int len;
len = str_len("hello, world/n");
printf("%d %d/n", num, len )
return 0;
}
gcc main.c mystr_len.c
将不能编译通过,因为mystr.c中的num变量和str_len函数都用了static关键字,导致他们只能在mystr.c中被使用,如文件中的mystr_len函数可以引用num变量和str_len函数。
//这是main.c 的内容
#include <stdio.h>
int main()
{
int len;
len = mystr_len("hello, world/n");
printf("%d %d/n", my_num, len )
return 0;
}
当不用static关键字时,等同于extern,即
int mystr_len(char *str)
{
return str_len(str) + num;
}
和
extern int mystr_len(char *str)
{
return str_len(str) + num;
}
是一样的。
二、函数作用域
static另外一个用途是函数内部静态变量,最常用的情况是
int *test()
{
int num = 100;
int *ptr = #
return ptr;
}
int main()
{
printf("%d/n", *test);
return 0;
}
该函数返回整数num的指针,在main函数中打印*test将会出现段错误,因为num做为test函数内部,只能在test内部被访问。以下程序是正确的。
int *test()
{
static int num = 100;
int *ptr = #
return ptr;
}
int main()
{
printf("%d/n", *test);
return 0;
}
该程序中num变量加了关键字static,函数运行结束后,依然可以在其他地方被引用,只是不能直接通过变量名访问,而要间接通过指针访问,原因是 static变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量,只是其他地方只能通过指针来访问,而不能直接通过变量名访问。
- c 语言的 static
- C/C++ 语言的Static
- c语言static的用法
- C语言 static的意义
- c语言的static属性
- C语言的static关键字
- C语言static的作用
- c语言 static的作用
- C语言 static的作用
- C 语言 static 的用法
- C语言 static 的作用
- C语言的static关键字
- c语言static的作用
- C语言 static 的使用
- C语言的static--理解
- C++的static关键字/包含C语言的static用法
- C语言的static关键字的理解
- 论c语言的static的使用
- 解决IBatis中的多对一映射n+1问题
- 贴几张图片
- [Tip] Log4j的配置
- DateAdd 函数
- 详细解说STL string
- c 语言的 static
- 关于xajax的中文编码问题
- struts分页实例代码
- WAP开发常见问题汇总篇
- Hibernate笔记
- 年月日三联动下拉框
- 检测手机对MMAPI支持的情况
- 嵌入式处理器分类与现状
- JavaScript