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是变量,其所指向的存储空间的值可以变化

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