Objective-C 指针
Objective-C中的指针很容易和有趣的学习。更容易地执行一些Objective-C语言的编程任务的指针,动态内存分配,其他的任务,如不能执行,而无需使用指针。因此,它成为必要学习指针成为一个完美的Objective-C程序员。让我们开始简单轻松的学习步骤。
如大家了解,每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问。考虑下面的例子,这将打印地址定义的变量:
#import <Foundation/Foundation.h> int main () { int var1; char var2[10]; NSLog(@"Address of var1 variable: %x ", &var1 ); NSLog(@"Address of var2 variable: %x ", &var2 ); return 0; }
上面的代码编译和执行时,它产生的结果如下的内容:
2013-09-13 03:18:45.727 demo[17552] Address of var1 variable: 1c0843fc 2013-09-13 03:18:45.728 demo[17552] Address of var2 variable: 1c0843f0
所以,明白了什么是内存地址,以及如何访问它,这些是基本的概念。现在,让我们看到了什么是一个指针。
什么是指针?
指针是一个变量,其值是另一个变量,即直接地址的内存位置的地址。像任何变量或常量,在使用之前必须声明指针,可以用它来存储任何变量地址。一个指针变量声明的一般形式是:
type *var-name;
在这里,type 为指针的基本类型,它必须是一个有效的Objective-C的数据类型和 var-name 是变量的指针。用来声明指针的是一个星号(*)。然而,在这个声明中的星号是被用来作为一个指针来指定一个变量。以下是有效的指针声明:
int *ip; /* yiibaier to an integer */ double *dp; /* yiibaier to a double */ float *fp; /* yiibaier to a float */ char *ch /* yiibaier to a character */
所有的指针的值的实际数据类型,无论是整数,浮点数,字符,否则,是一样的,很长的十六进制数字,表示一个内存地址。不同数据类型的指针之间的唯一区别是变量或常量的指针指向的数据类型。
如何使用指针?
有一些重要的操作,我们将非常频繁地与指针的帮助。 (a)我们定义一个指针变量,(b)分配一个指针变量的地址,(c)最后访问提供的地址指针变量的值。这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址。下面的例子使用这些操作:
#import <Foundation/Foundation.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* yiibaier variable declaration */ ip = &var; /* store address of var in yiibaier variable*/ NSLog(@"Address of var variable: %x ", &var ); /* address stored in yiibaier variable */ NSLog(@"Address stored in ip variable: %x ", ip ); /* access the value using the yiibaier */ NSLog(@"Value of *ip variable: %d ", *ip ); return 0; }
上面的代码编译和执行时,它产生的结果如下的东西:
2013-09-13 03:20:21.873 demo[24179] Address of var variable: 337ed41c 2013-09-13 03:20:21.873 demo[24179] Address stored in ip variable: 337ed41c 2013-09-13 03:20:21.874 demo[24179] Value of *ip variable: 20
Objective-C 的空指针
它始终是一个很好的做法,一个指针变量分配一个NULL值的情况下,没有确切的地址被分配。这样做是在当时的变量声明。被指定为NULL 指针,被称为一个空指针。
NULL指针是一个常数与几个标准库中定义的一个零值。考虑下面的程序:
#import <Foundation/Foundation.h> int main () { int *ptr = NULL; NSLog(@"The value of ptr is : %x ", ptr ); return 0; }
上面的代码编译和执行时,它会产生以下结果:
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
大部分的作业系统,程序不允许被保留,因为该内存由操作系统来访问内存地址0处。然而,存储器地址0具有特殊的意义,它的信号,指针不指向一个可访问的存储器位置。但是,按照惯例,如果一个指针包含空值(零),它被假定为指向什么。
要检查空指针,可以使用一个if语句如下:
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
Objective-C语言指针的详细介绍:
指针有很多,但简单的概念,他们在Objective-C编程是非常重要的。有以下几个重要的指针概念,这应该是一个Objective-C语言程序员清楚:
概念 | 描述 |
---|---|
Objective-C 指针运算 | 有四种算术运算符,可以用在指针中: ++, --, +, - |
Objective-C 数组的指针 | 可以定义数组指针持有数值。 |
Objective-C 指向指针的指针 | Objective-C中可以让一个指针指向指针。 |
Objective-C 传递指针的函数 | 引用或按地址传递参数的功能,既可以传递的参数调用函数被调用函数改变。 |
Objective-C 函数返回指针 | Objective-C中允许一个函数返回一个指向局部变量,以及静态变量和动态分配的内存。 |