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



一、变量的地址和指针 

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

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

    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.通过指针变量获取地址值
              i nt 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] */
            (指针可以进行比较,通常两个或多个指针指向同一目标时比较才有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值