打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量,只是其他地方只能通过指针来访问,而不能直接通过变量名访问。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
判断一个正整数是否为2的n次幂(Java实现)
请用代码写一个算法测试回环字符串函数
数字转字母
C#传委托给C的函数指针调用问题
C++习题与解析(引用-03)
ASCII与十六制字符串互相转换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服