歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中參數的持續性,作用域和連接性

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

日期:2017/3/1 10:12:54   编辑:Linux編程

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

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

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

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

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

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

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

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

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

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

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

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

file1.cpp

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