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

简介: 1.exit(0)正常退出程序    exit(1)程序异常时退出程序 2.static(静态变量)修饰局部变量   在局部变量使用static修饰,会延长局部变量的存在期。但我们需要注意一下几点: 虽然static修饰变量的生存期很长,但它始终是局部变量,不能在其他函数中使用 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?      全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

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';

}

 

目录
相关文章
|
24天前
|
编译器 C语言
【C语言】extern 关键字详解
`extern` 关键字在C语言中用于跨文件共享变量和函数的声明。它允许你在一个文件中声明变量或函数,而在其他文件中定义和使用它们。理解 `extern` 的使用可以帮助你组织和管理大型项目的代码。
66 3
|
24天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
77 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
24天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
48 10
|
24天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
43 9
|
24天前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
48 9
|
24天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
33 8
|
24天前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
42 7
|
24天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
43 6
|
24天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
165 6
|
24天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
52 6