C 语言 static、extern与指针函数介绍

1.exit(0)正常退出程序

   exit(1)程序异常时退出程序

2.static(静态变量)修饰局部变量

  在局部变量使用static修饰,会延长局部变量的存在期。但我们需要注意一下几点:

  • 虽然static修饰变量的生存期很长,但它始终是局部变量,不能在其他函数中使用
  • static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?       全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,  静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,  当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,  在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,  因此可以避免在其它源文件中引起错误。      从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。      static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件      static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;      static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;      static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

3.extern(外部变量)  修饰全局变量

       extern 不但可以修饰变量还可以修饰函数

全局变量范围已经很广了,为什么还要用extern来修饰呢?看下面一个例子

#include "stdio.h"
void main()
{
      extern        a;
      extern        b;
      printf("a=%d,b=%d",a,b);  
}
int a=13,b=5;

上面例子中,在定义了a,b之前就使用它,也就是说extern扩展了全局变量的作用范围。

extern不仅上边例子这种用法,在不同文件中的全局变量也可以使用extern来使用。

4.指针函数

       定义:指针函数就是函数类型和返回值都是指针的函数。

指针函数的一般形式:

              类型 *函数名(参数列表)

下面用一个例子来体会一下指针函数的妙用吧

/* Note:Your choice is C IDE */
#include "stdio.h"
char * SubString(char s[],int i,int j);
char *SubString1(char s[] ,char temp[], int i,int j);
void main()
{ 
char string[]="I Love C Language"; 
char *ps=NULL;
char temp[100];
ps=SubString(string,2,9); 
printf("%s\n",ps);  
SubString1(string,temp,2,9);
printf("%s\n",temp);
}
char * SubString(char s[],int i,int j)
{
   static char temp[100];/*这个地方声明的临时数组必须为static,否则值传不会去*/
int m,n;
for(m=0,n=i;n<=j;m++,n++)
{
temp[m]=s[n];
}
temp[m]='\0';
return temp;
}
char *SubString1(char s[] ,char temp[], int i,int j)
{
int m,n;
for(m=0,n=i;n<=j;m++,n++)
{
temp[m]=s[n];
}
temp[m]='\0';
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

(转)Java正则表达式入门

众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此...

371
来自专栏web前端教室

[先行者周日课程-0305] web前端组件 之 拖动窗口

学习笔记如下: 今天的内容,是拖动窗口。 js的引用数据类型,基本数据类型。 js它有5种基本数据类型: undefined , null, Boolean,...

1838
来自专栏惨绿少年

AWK常用技巧

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确...

1023
来自专栏极客慕白的成长之路

前端知识点总结 : Vue

作用:将表达式执行的结果 输出当调用元素的innerHTML中;还可以将数据绑定到视图。

341
来自专栏JetpropelledSnake

Django学习笔记之Django中间件

1345
来自专栏AzMark

Python 学习之正则表达式「上 」

相信你此刻已经感受到了它的强大之处,接下来就让我们开始正则表达式的学习。先来介绍一下 re 模块。

531
来自专栏马涛涛的专栏

模块化、闭包与立即执行函数的使用、MVC里的V和C

将js分成不同的几个模块后,然后使用文件引入,但是会出现问题:如果使用var 声明变量,那么就会成为全局变量,这样容易覆盖.

481
来自专栏向治洪

ECMAScript 6之Set和Map数据结构

Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 va...

1988
来自专栏Jackson0714

正则表达式全部符号解释

33815
来自专栏racaljk

正则表达式

\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\...

905

扫码关注云+社区