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 指向指针的指针

 

posted @ 2018-05-31 17:07  喵呜喵喵  阅读(980)  评论(0编辑  收藏  举报