• Objective-C 学习笔记(五) 指针


    Objective-C 指针

    每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问。

    a. 我们定义一个指针变量

    b. 分配一个指针变量的地址

    c. 最后访问提供的地址指针变量的值。这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址。

    实例:

     1 #import <Foundation/Foundation.h>
     2 
     3 int main ()
     4 {
     5    int  var = 20;   /* actual variable declaration */
     6    int  *ip;        /* yiibaier variable declaration */
     7 
     8    ip = &var;  /* store address of var in yiibaier variable*/
     9  
    10    NSLog(@"Address of var variable: %x", &var  );              //Address of var variable: 337ed41c
    11 
    12    /* address stored in yiibaier variable */
    13    NSLog(@"Address stored in ip variable: %x", ip );            //Address stored in ip variable: 337ed41c
    14 
    15    /* access the value using the yiibaier */
    16    NSLog(@"Value of *ip variable: %d", *ip );                //Value of *ip variable: 20
    17 
    18    return 0;
    19 }

    解惑:

    • ip = &var      取地址        →         *ip = var      取值
    • 如果指针指向NULL,地址为0

    指针的算术运算

    ptr是一个整数的指针,它指向的地址1000,假设32位的整数,执行  ptr++  操作后,指针将指向 1004 位置

    因为每次指针递增,它会指向到下一个整数的位置,这是到当前位置的下一个4个字节。此操作将指针移动到下一个内存位置,而不会影响实际值的内存位置。如果ptr指向一个字符的地址是1000,那么上面的操作将指向下一个字符的位置1001

    指针递增运算

     1 #import <Foundation/Foundation.h>
     2 
     3 const int MAX = 3;
     4 
     5 int main ()
     6 {
     7    int  var[] = {10, 100, 200};
     8    int  i, *ptr;
     9 
    10    /* let us have array address in yiibaier */
    11    ptr = var;
    12    for ( i = 0; i < MAX; i++)
    13    {
    14       NSLog(@"Address of var[%d] = %x", i, ptr );
    15       NSLog(@"Value of var[%d] = %d", i, *ptr );
    16 
    17       /* move to the next location */
    18       ptr++;
    19    }
    20    return 0;
    21 }

    产生结果如下:

    Address of var[0] = 7e6f2a70
    Value of var[0] = 10
    Address of var[1] = 7e6f2a74
    Value of var[1] = 100
    Address of var[2] = 7e6f2a78
    Value of var[2] = 200

     

    指向指针的指针

    实例:

     1 #import <Foundation/Foundation.h>
     2  
     3 int main ()
     4 {
     5    int  var;
     6    int  *ptr;
     7    int  **pptr;
     8 
     9    var = 3000;
    10 
    11    /* take the address of var */
    12    ptr = &var;
    13 
    14    /* take the address of ptr using address of operator & */
    15    pptr = &ptr;
    16 
    17    /* take the value using pptr */
    18    NSLog(@"Value of var = %d", var );
    19    NSLog(@"Value available at *ptr = %d", *ptr );
    20    NSLog(@"Value available at **pptr = %d", **pptr);
    21 
    22    return 0;
    23 }

    产生结果如下:

    Value of var = 3000
    Value available at *ptr = 3000
    Value available at **pptr = 3000

    解惑:

    • var = 3000 , ptr = &var , pptr = &ptr = &&var
    • *ptr = var , *pptr = ptr , **pptr = *ptr = var = 3000

    参考资料:

    [1] 易百教程 Objective-C 指针

    [2] 易百教程 Objective-C 指针运算

    [3] 易百教程 Objective-C 指向指针的指针

  • 相关阅读:
    java调用本地默认浏览器
    spark入门(helloworld插件)
    Android下 布局加边框 指定背景色 半透明
    Android下Fragment使用(全集)
    Android下的broadcast
    Android 下Service
    Android实用工具
    CSDN云盘资源
    Codeforces Round #201 (Div. 2). E--Number Transformation II(贪心)
    Codeforces Round #201.C-Alice and Bob
  • 原文地址:https://www.cnblogs.com/hyating/p/9117728.html
Copyright © 2020-2023  润新知