ios 各種變數和作用範圍

來源:互聯網
上載者:User

標籤:

 

根據儲存位置不同,可以分為,靜態變數(靜態儲存區),動態變數(運行時堆棧),寄存器變數(寄存器)

靜態變數(靜態儲存區):全域變數和使用static聲明的局部變數都是靜態變數,在系統運行過程中只初始化一次。#include <stdio.h>

int a=1; //全域變數儲存在靜態記憶體中,只初始化一次void showMessage(){    static int b=1; //靜態變數儲存在靜態記憶體中,第二次調用不會再進行初始化    int c=1;    ++b;    a+=2;    printf("a=%d,b=%d,c=%d\n",a,b,c);}int main(int argc, const char * argv[]) {    showMessage(); //結果:a=3,b=2,c=1    showMessage(); //結果:a=5,b=3,c=1    return 0;}

解釋:

全域變數,範圍在自己的類裡,類實現的各處均可調用。儲存在靜態區

局部變數,範圍在一個方法裡,方法結束,變數銷毀。儲存在動態區,儲存在棧中。

自動變數;不含有static的局部變數,儲存在棧中。

static修飾的變數;靜態變數,範圍為本類(如果其他類調用該變數的同名變數,不會報錯。)修飾函數,為內建函式,外部調用會報錯。

extern修飾的變數:申明一個已經存在的變數,只是聲明,沒有初始化。extern修飾函數,是聲明和定義函數為外部函數,可以省略,所以所有的函數都預設為外部函數。

單例是全域變數,因為單例在整個程式運行期間只被建立初始化一次,因此單例只儲存一個對象,如果在A類中建立單例,那麼在B類中再次建立單例的話,單例仍然保持著A類中得對象,單例對象的各種狀態就依然儲存著A類運行之後的狀態。(比如一個播放器對象Player,是一個單例,你在A類中設定Player.playing = YES;之後跳轉到B類,再次建立Player對象,Player.playing屬性仍然是YES,不會因為重新建立而預設為nil);

重載就是重新載入,就是重新alloc。

總結

最後做一下簡單總結一下:

  1. extern作用於變數時用於聲明一個已經定義的變數,但是並不能定義變數;使用extern你可以在其他檔案中使用全域變數(當然此時extern可以省略);
  2. extern作用於函數時與它作用於全域變數有點類似,聲明這個函數是外部函數,其他檔案可以訪問,但不同的是當它作用於函數時不僅可以聲明函數還可以定義函數(用在函數定義前面),不管是定義還是聲明都可以省略,C語言預設認為函數定義或聲明都是外部函數;
  3. static作用於變數時,該變數只會定義一次,以後在使用時不會重新定義,當static作用於全域變數時說明該變數只能在當前檔案可以訪問,其他檔案中不能訪問;
  4. static作用於函數時與作用於全域變數類似,表示聲明或定義該函數是內建函式(又叫靜態函數),在該函數所在檔案外的其他檔案中無法訪問此函數;
  5. 參考http://www.cnblogs.com/kenshincui/p/3854243.html

ios 各種變數和作用範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.