黑马程序员——IOS基础(地址和指针)

来源:互联网 发布:淘宝旺旺卖家版 千牛 编辑:程序博客网 时间:2024/04/28 17:34

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、变量的地址和指针 

   变量的地址:计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就是该内存的地址,并
                          且这些编号是连续的。而一个变量实质上代表了“内存中的某个存储单元”,而这些存储单元的编号就是该变量的地                             址。
   指针:指针是用于存放变量的地址,用于存放变量地址的变量称为“指针变量”。

二、指针变量的定义和指针变量的基类型

    1.定义指针变量的一般形式如下:      
          类型名  *指针变量名1; *指针变量名2,...........;
          例如:
           int    *p,*q;
    注意:每个变量前的星号是一个说明符,用来说明该变量是指针变量。变量前的星号不可省略,若省略了星号说明符,就变成了
               将p和q定义为整形变量。
    
    2.指针变量的基类型:在这里主要说明一下为什么指针必须区分基类型。一个指针变量中存放的是一个存储单元的地址。这里“一                                        个存储单元”中的“一”所代表的字节数是不同的:对short int类型整数而言,它代表2个字节;对int类型而                                              言,它 代表4个字节,这就是基类型的不同含义。在涉及指针的移动,也就是要对地址进行增减运算,这时                                        指针移动的最小单位是一个储存单元,而不是1个字节。因此对于基类型不同的指针变量,其内容增1、减1                                        所“跨越” 的字节数不同,因此,基类型不同的指针变量不能混合使用。

三、给指针变量赋值

     1.通过求地址运算符(&)获取地址值
            int k=1, *q, *p;   
         则赋值语句:
            q=&k;  
      说明:求地址运算符&只能应用于变量和数组元素,不可以用于表达式、常量。

      2.通过指针变量获取地址值
             int k=1, *q, *p;   
         则赋值语句:
            q=&k;
            p=q;  
        这样指针变量p、q都指向了变量k。

四、对指针变量的操作

    1.通过指针来引用一个存储单元
       C语言提供了间址运算符“ * ”,当指针变量中存放了一个确切的地址时,就可以用“ * ”通过指针来引用该地址的存储单元。
       int  *p, i=10, j;
       p=&i;                   /* p通过地址运算符&获得i的地址 */
       j=*p;                    /* 指针变量p存储的是i的地址,*p等价于i,即将i的值赋给j (j=i)*/            
       由于“ * "操作的的对象是一个确切的地址值,所以j=*p;也可以表示为:
       j=*(&i); 

       扩展:
        int * *p, *s, k=20;
        s=&k;                  /*  *s代表存储单元k */
        p=&s;                  /*  *p代表存储单元s */
        因此 * *p也代表存储单元k。

     2.移动指针
               移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储
        单元时,指针的移动才有意义。
        例:


                                                                                        a[0]     a[1]     a[2]    a[3]   a[4]                                                                                            
1122334455                                                                                                p                 q                            


                                                                                           a[0]     a[1]     a[2]    a[3]   a[4]                                                                                            
1122334455                                                             p                 q                                                            


q = p+2;      /*如上第一个图所示,使指针q指向存储单元a[2] */
     q++;            /* 向高地址移动指针q,使指针q指向存储单元a[3] */
     q++;            /* 向高地址移动指针q,使指针q指向存储单元a[4] */
     q--;             /* 向低地址移动指针q,使指针q指向存储单元a[3] */
            (指针可以进行比较,通常两个或多个指针指向同一目标时比较才有意义。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击