變數有分存值變數與存址(記憶體位址)兩種,一般未加修飾宣告都是存值變數,例如


    int v=100;
    NSLog(@"%i",v)

就會輸出【100】,如果想要取得一個存值變數的記憶體位址,可以使用 "&" 放在變數前面,如:

    int v=100;
    NSLog(@"Address is: %x",&v);

就會輸出【Address is: 5fbff800】之類的記憶位置。
 
指標變數(又稱存址變數),則是在宣告變數前,加一個星號 * ,其內容就會變成指標變數,然後我們就可以由該指標指向的位置,進行各項操作。請看下面的例子,會比較容易了解:

    int v=100;
    int *pointer=&v;
    NSLog(@"Address is:%x, value is :%i",pointer,*pointer);

輸出為【Address is:5fbff80c, value is :100】。
 
為什麼要有指標變數號?因為我們在寫程式的時候,不可能把所有的變數都設為全域變數,那會造成管理上的不便(太多相同名稱的變數),以及記憶體的浪費(所有的變數都永遠佔記憶體不放)。但又要在不同的 stuck 之間,進行資料的操作,我們就可以用傳送記憶位置的方式來傳送,而不是以回傳值的方式來操作。
arrow
arrow

    shenfive 發表在 痞客邦 留言(0) 人氣()