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

}

 

时间: 2024-11-14 12:15:15

C 语言 static、extern与指针函数介绍的相关文章

深入理解C语言 static、extern与指针函数

 这篇文章主要介绍了C语言 static.extern与指针函数,有需要的朋友可以参考一下 1.exit(0)正常退出程序   exit(1)程序异常时退出程序   2.static(静态变量)修饰局部变量   在局部变量使用static修饰,会延长局部变量的存在期.但我们需要注意一下几点:   •虽然static修饰变量的生存期很长,但它始终是局部变量,不能在其他函数中使用 •static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函

深入理解C语言 static、extern与指针函数_C 语言

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

c语言-C语言二叉树中一个二级指针函数问题

问题描述 C语言二叉树中一个二级指针函数问题 static BSTREE_NODE** find(int data, BSTREE_NODE** root){ 39 if(! *root) return root; 40 else if(data == (*root)->data) return root; 41 else if(data < (*root)->data) 42 return find(data,&(*root)->left); 43 else return

C语言结构体中的函数指针

引言 指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序.我们要记住指针是一个指向内存地址的变量.指针可以引用如int.char--常见的数据类型,例如: int * intptr; // 声明一个指向整型值的指针 int intval = 5 ; // 定义一个整型变量 intptr = & intval ; // intptr现在包含intval的地址 指针不仅仅指向常规的类型还可以指向函数 函数指针 函数指针的内容不难理解,不再赘述,参见<C

C语言的那些小秘密之函数指针

函数是由执行语句组成的指令序列或者代码,这些代码的有序集合根据其大小被分配到一定的内存空间中,这一片内存空间的起始地址就成为函数的地址,不同的函数有不同的函数地址,编译器通过函数名来索引函数的入口地址,为了方便操作类型属性相同的函数,c/c++引入了函数指针,函数指针就是指向代码入口地址的指针,是指向函数的指针变量. 因而"函数指针"本身首先应该是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整形变量.字符型.数组一样,这里是指向函数.C在编译时,每一个函数都有一个入口地址

详解C语言结构体中的函数指针_C 语言

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

函数指针与指针函数的学习总结_C 语言

函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑.各位能否讲的详细点呢? (1) float(**def)[10]   def是什么?(2) double*(*gh)[10]   gh是什么?(3) double(*f[10])()   f是什么?(4) int*((*b)[10])    b是什么?这样老感觉有点乱,有什么窍门可以记得并理解的清楚一点么? ======================解答:   (1) def是一个指针, 指向的对象

简要说明C语言中指针函数与函数指针的区别_C 语言

指针函数一般是指返回指针的函数: #include <stdio.h> int* fun(int *a) { return a; } int main(int argc, char **argv) { int a = 3; printf("%d", *(fun(&a))); return 0; }   函数指针是表示指向函数开始地址的指针: 首先要了解函数的调用过程: #include <stdio.h> int fun(int i) { return

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,