iOS開發之-指針小結

1>指針分類:

   (1強指針:默認情況下,都是強指針(__strong)

   (2弱指針: __weak 修飾 

指針:指針是一個地址,我們可以通過獲取地址來操控此地址中存儲空間的值。

2>指針變量

    作用:只能存放地址(指針變量佔用8個字節存儲空間),能夠根據地址值訪問存儲空間,並修改存儲空間的值。

    *p代表訪問p的存儲空間(p是指針)

    int *p;

    p=&b;            //代表指針p存儲變量的b地址  指針變量p指向b

       (指針變量可以先定義後賦值也可以定義的同時賦值)

 (定義指針類型時不可亂用類型,應與被指向變量類型一致)

3>指針訪問的空間大小

   指針訪問的空間大小隻與指針的返回值有關,和變量沒關係。

    eg: chara='A';    //代表指針p訪問的空間大小爲1個字節。

         int *p=&a;  //代表指針p訪問的空間大小爲4個字節。

 

 p=p2;    //代表指針p2的地址複製給指針p,指針p將指向指針p2所指向的存儲空間

 

4>指針和數組

 4.1內存區分部分

    常量區:存放一些常量字符串,會將結果緩存,結果無法更改。

     堆:存放對象,需要自己創建對象。類似我們自己做菜炒飯。

     棧:存放局部變量 ,直接調用程序中有的。類似在酒店點菜喫飯,不需要自己做

     靜態區:存放全局變量和靜態變量。

  4.2指針與數組

    我們可以通過指針操作數據。

  eg:

   ag[]={6,8,2,5,1};

    int*p=&ag[0];    //或者p=ag;

   /* 

   p-->&ag[0]

    p+1-->&ag[1]

    p+2 -->&ag[2]

    p+i-->&ag[i]

    */

    指針加1代表指針指向下一個數組地址(1具體的字節數取決指針類型,eg:int類型就加4,char類型就加1)。

  

  5>數組元素的訪問方式

      1>數組名[下標]   ages[i]

      2>指針名[下標]    p[i]

     3>*(p+i)

 

6>指針與字符串

 6.1.定義字符串的兩種方式

   6.1.1利用數組定義:

 charname[]="itcat";

 char name2[]="itcat";     //開閉新的內存存儲空間

 特點字符串裏的字符可以修改。此值放在棧內,屬於字符串變量

 使用場合:字符串內容需要經常修改。

 

    6.1.2 利用指針:

 char*name="itcast";

 char*name2="itcast";           //使用*name的存儲空間,不會新增存儲空間,指針name2指向第一個字符的地址,既字符i的地址

 特點:字符串其實是一個常量字符串,裏面的字符無法修改,因爲此值放在常量區內,會將此值緩存,屬於字符串常量

 使用場合:字符串內容不需要修改,且字符串內容要經常使用

 

7>指針與函數 

 7.1 指向函數的指針

    int(*p)();    //代表指針p指向一個函數,函數的返回值是int類型

例:

    void (*p)();       //指針名p 指向一個函數

     p=test;           //test是函數名 函數名就相當於地址(整個函數的入口)

    (*p)();             //調用指針所指向的存儲空間

 

  調用方法:

     a>  (*p)();       //調用指針所指向的存儲空間

     b> test();       //直接使用函數名調用

  7.2 返回指針的函數

     int*test();    //代表test函數返回的是指針(也就是返回地址)


8>清空指針

           p = 0;

           p = NULL;

9>數組指針和指針數組

       指針數組是指針的數組,裏邊的內容是指針

   例:

       int*p[4];     // 指向4個int類型的指針

    數組指針是指向數組的指針,具體一點是指向數組的第一個元素,指針每加一便指向數組的下一個元素

 

10> int const *p和int *const p的區別

   int const *p: 1) const修飾的是*p,因此*p 是常量,不能通過*p 修改p所指向的存儲空間的值

                              2)P是變量,可以被賦值,p所指向的地址可以變化。

   int *const p1)p是常量,其所指向的地址不能變化。

                                 2)*p是變量,其所指向的存儲空間的值可以變化

   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章