程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C 語言 static、extern與指針函數介紹

C 語言 static、extern與指針函數介紹

編輯:關於C語言

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

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved