欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解C語言 static、extern與指針函數

 更新時間:2013年12月08日 16:23:11   作者:  
這篇文章主要介紹了C語言 static、extern與指針函數,有需要的朋友可以參考一下

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

exit(1)程序異常時退出程序

2.static(靜態(tài)變量)修飾局部變量

在局部變量使用static修飾,會延長局部變量的存在期。但我們需要注意一下幾點:

•雖然static修飾變量的生存期很長,但它始終是局部變量,不能在其他函數中使用
•static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數與普通函數有什么區(qū)別?
     全局變量(外部變量)的說明之前再冠以static 就構成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式,  靜態(tài)全局變量當然也是靜態(tài)存儲方式。 這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,  當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內有效,  在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用,  因此可以避免在其它源文件中引起錯誤。
     從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域, 限制了它的使用范圍。
     static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件
     static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;
     static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據上一次結果值;
     static函數與普通函數有什么區(qū)別: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';
}

相關文章

  • C語言初識變量常量字符串轉義符及注釋方式簡介

    C語言初識變量常量字符串轉義符及注釋方式簡介

    最強的C語言筆記,此處對于C語言的基礎部分做一個簡要的介紹,作者實屬初學,寫博客也是作者學習的一個過程,若文中內容有理解不到位或者有不當之處,還請朋友們不吝指正
    2021-11-11
  • C++ std::initializer_list 實現(xiàn)原理解析及遇到問題

    C++ std::initializer_list 實現(xiàn)原理解析及遇到問題

    這篇文章主要介紹了C++ std::initializer_list 實現(xiàn)原理勘誤,本文通過源碼解析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C++11-20 常量表達式的使用

    C++11-20 常量表達式的使用

    本文主要介紹了C++11-20常量表達式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言如何實現(xiàn)順序表(數據結構)

    C語言如何實現(xiàn)順序表(數據結構)

    這篇文章主要介紹了C語言如何實現(xiàn)順序表(數據結構)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++移除序列中連續(xù)重復的特定值示例代碼

    C++移除序列中連續(xù)重復的特定值示例代碼

    這篇文章主要給大家介紹了關于在C++中如何移除序列中連續(xù)重復的特定值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • 如何在c++中實現(xiàn)字符串分割函數split詳解

    如何在c++中實現(xiàn)字符串分割函數split詳解

    這篇文章主要給大家介紹了關于如何在c++中實現(xiàn)字符串分割函數split的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼

    C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼

    這篇文章主要介紹了 C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • opencv實現(xiàn)輪廓高斯濾波平滑

    opencv實現(xiàn)輪廓高斯濾波平滑

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)輪廓高斯濾波平滑,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++語言實現(xiàn)hash表詳解及實例代碼

    C++語言實現(xiàn)hash表詳解及實例代碼

    這篇文章主要介紹了C++語言實現(xiàn)hash表詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-01-01
  • C++布隆過濾器的使用示例

    C++布隆過濾器的使用示例

    寧可錯殺一千,也不放過一個,這是布隆過濾器的特點,本文主要介紹了C++布隆過濾器的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09

最新評論