歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++中參數的持續性,作用域和連接性

C++中參數的持續性,作用域和連接性。

稍稍看了會C++ Primer,然後把書中講這部分的內容精簡下。

先給大家說下自動變量,這個是在函數中用的,我個人認為是比較多的一中變量。自動變量的修飾符是(auto),但一般情況下我們忽略它,它是在代碼塊中被創建,當代碼塊結束就消失的一種變量。它是存放在堆棧中,所以可想而知,當堆棧結束後,變量也不在了。

接下來講下自動變量中的寄存器變量,上面說了,變量放在堆棧中,所以會消耗內存,而寄存器變量則解決了這個問題,它需要在自動變量聲明前加上一個“register”,這樣編輯器就會去使用寄存器來處理變量。但記住一點,由於寄存器上沒有地址,所以,對寄存器變量不能使用取地址符號。

接下來說一下靜態變量。這個是我個人感覺很頭疼的一種變量。

首先,靜態存儲持續性有三種鏈接性,1.外部鏈接性,2.內部鏈接性,3.無連接性。

下面上一張表格,裡面介紹了五種存儲方式。

5種變量儲存方式 存儲描述 持續性 作用域 鏈接性 如何聲明 自動 自動 代碼塊 無 在代碼塊中,(auto) 寄存器 自動 代碼塊 無 在代碼塊中,用register 靜態,無連接性 靜態 代碼塊 無 在代碼塊中,用static 靜態,外部鏈接性 靜態 文件 外部 在函數外面 靜態,內部鏈接性 靜態 文件 內部 在函數外面,使用關鍵字static

我先貼這些上來,相信大家也都能看懂些,時間不早了,先睡覺去,明天晚上下班後,接著補充,到時候給大家上幾段代碼,然後介紹下命名空間,其實也是一種作用域。嘿嘿,先挖個坑在這,明天來填坑,啊不對。。12點了,是今天晚上。。。

繼續更新,接下來貼一段靜態修飾的,外部鏈接性的例子

  1. #include <iostream>   
  2.   
  3. using namespace std;  
  4. //注意warming變量   
  5. double warming = 0.3;               //全局變量 稱為定義,給變量分配存儲空間   
  6.   
  7. void update(double dt);  
  8. void local();  
  9.   
  10. int main(){  
  11.     cout << "Global warming is " << warming << " degrees.\n";  
  12.     update(0.1);  
  13.     cout << "Global warming is " << warming << " degrees.\n";  
  14.     local();  
  15.     cout << "Global warming is " << warming << " degrees.\n";  
  16.     return 0;  
  17. }  
  18.   
  19. void update(double dt)  
  20. {  
  21.     extern double warming;          //引用外部變量  為0.3<SPAN>    </SPAN>稱為聲明,不給變量分配存儲空間   
  22.     warming += dt;  
  23.     cout << "UPdating gloabal warming to " << warming;  
  24.     cout << " degrees.\n";  
  25. }  
  26.   
  27. void local()  
  28. {  
  29.     double warming = 0.8;           //隱藏了外部變量 為0.8   
  30.     cout << "Local warming = " << warming << " degrees.\n";  
  31.     cout << "the global waming is " << ::warming;   
  32. }  
這個注釋蠻清楚了,最好運行下自己看看。

下面兩段代碼是靜態修飾,內部鏈接性的例子

file1.cpp

  1. #include <iostream>   
  2.   
  3. int tom = 3;                //   
  4. int dick = 30;              //   
  5. static int harry = 300;     //內部鏈接性,只在該函數內部可用。   
  6.   
  7. void remote_access();  
  8.   
  9. int main()  
  10. {  
  11.     using namespace std;  
  12.     cout << "main()reports the following addresses: \n";  
  13.     cout << &tom << " = &tom, " << &dick << " = &dick, ";  
  14.     cout << &harry << " = &harry\n";  
  15.     cout << tom << ' ' << dick << ' ' << harry << ' ' << endl;        // 3 30 300   
  16.     remote_access();  
  17.     return 0;  
  18. }  
file2.cpp
  1. #include <iostream>   
  2.   
  3. extern int tom;  
  4. static int dick = 10;           //內部鏈接性   
  5. int harry = 200;  
  6.   
  7. void remote_access()  
  8. {  
  9.     using namespace std;  
  10.     cout << "remote_access() reports the following address: \n";  
  11.     cout << &tom << " = &tom, " << &dick << " = &dick, ";  
  12.     cout << &harry << " = &harry\n";  
  13.     cout << tom << ' ' << dick << ' ' << harry << ' ' << endl;        // 3 10 200   
  14. }  
Copyright © Linux教程網 All Rights Reserved