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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shicuf 中级黑马   /  2014-12-22 00:21  /  832 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这块能不能明白人来总结一下?

5 个回复

倒序浏览
对于C语言的static,我只掌握了  隐藏全局变量、隐藏函数、只分配一次内存的用法。其余就不知道了
回复 使用道具 举报
本帖最后由 木子小静 于 2014-12-22 10:18 编辑

static 修饰内部函数,定义的函数只能被本文件访问,其他文件不能访问,允许不同文件中有同名的内部函数,作用:1、定义内部函数2、声明函数
static 修饰局部变量,定义的变量只能被本文件访问,不能被其他文件访问,且不同文件中的同名内部变量互不影响,作用:1、延长局部变量的生命周期,程序结束时才会被销毁。2、作用域不更改。使用场合:1、如果某个哈书的调用频率很高。2、函数内部的某个变量值是固定不变的
怎么获得技术分啊,求指教~
回复 使用道具 举报
static对变量的作用:  定义一个内部变量
回复 使用道具 举报
木子小静 发表于 2014-12-22 10:16
static 修饰内部函数,定义的函数只能被本文件访问,其他文件不能访问,允许不同文件中有同名的内部函数, ...

发帖和评论赚黑马币,然后兑换!
回复 使用道具 举报
1. hello.c 文件
  1. #include<stdio.h>
  2. int a=1;    //在其他文件中 通过声明  extern int a;  可以引用此全局变量 a
  3. //static int a = 1;  -->用 static 修饰的全局变量在其他文件中不可以 引用
  4. extern void hello()    //在其他.c 文件中 通过声明 extern void hello(); 可以调用此函数   等同于 extern void hello()
  5. //static void hello()   --> 用 static 修饰的 函数 在其他文件中 不可以调用
  6. {
  7.     printf("hello world!\n");
  8.     printf("a = %d\n",a);
  9.     a++;
  10. }
复制代码
2. main.c 文件
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. extern void hello();  // 此声明说明 hello(); 函数定义在其他文件中
  4. extern int a;   //此声明说明 a 全局变量 定义在其他文件中
  5. void test();
  6. void main()
  7. {
  8.     hello();    //调用外部函数
  9.     hello();
  10.     printf("a of main = %d\n",a);
  11.     printf("==============\n");
  12.     test();
  13.     test();
  14. }

  15. void test()
  16. {
  17.     static int q;   //函数第一次调用时创建 只初始化一次 程序结束时释放。但作用域仅局限于此函数
  18.     static int *d = NULL;
  19.     if(d == NULL)
  20.         d = (int *)malloc(sizeof(int));
  21.     //int *d = (int *)malloc(sizeof(int));  
  22.     printf("in test q=%d\n",q);
  23.     printf("in test d=%d   addr=%x\n",*d,&d);
  24.     q++;
  25.     *d = *d +1;
  26. }
复制代码

Linux下的  简单的小程序,可以测试一下。
简单的说 : 修饰变量   和  修饰   函数
1、修饰函数
static  修饰的函数  称为 内部函数  只能被文件中的函数调用 ,在必要的时候使用可以降低函数间的耦合性。
extern 修饰 或者 无修饰符的函数 称为 外部函数  就是可以被其他文件调用的函数。但在调用前必须用  extern  void  funcname(void);  声明 。
2、修饰变量
a. 修饰全局变量时    与修饰函数类似
b. 修饰局部变量时   局部变量在 第一次调用函数时创建,并只初始化一次。变量不会随函数调用结束而释放,而是随程序结束而释放。但注意,变量作用域只局限于此函数,不能被其他函数调用。

只知道这些了,还有什么不全的请补充,如果有错误的地方请指教。3Q



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马