c语言static详解

c语言static详解

 

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 = &num; 

return ptr; 

 

int main() 

printf("%d/n", *test); 

return 0; 

 

该函数返回整数num的指针,在main函数中打印*test将会出现段错误,因为num做为test函数内部,只能在test内部被访问。以下程序是正确的。 

 

int *test() 

static int num = 100; 

int *ptr = &num; 

return ptr; 

 

int main() 

printf("%d/n", *test); 

return 0; 

 

该程序中num变量加了关键字static,函数运行结束后,依然可以在其他地方被引用,只是不能直接通过变量名访问,而要间接通过指针访问,原因是 static变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量,只是其他地方只能通过指针来访问,而不能直接通过变量名访问。 

 

 

转自:http://www.lslnet.com/linux/dosc1/03/linux-121761.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值