指针(Pointers)
Objective-C中的指针简单易学。 使用指针可以更轻松地执行某些Objective-C编程任务,而不使用指针就无法执行其他任务(如动态内存分配)。 所以有必要学习指向成为一个完美的Objective-C程序员。 让我们开始通过简单而简单的步骤学习它们。
如您所知,每个变量都是一个内存位置,每个内存位置都定义了其地址,可以使用和号(&)运算符进行访问,该运算符表示内存中的地址。 考虑以下示例,它将打印定义的变量的地址 -
#import <Foundation/Foundation.h>
int main () {
int var1;
char var2[10];
NSLog(@"Address of var1 variable: %x\n", &var1 );
NSLog(@"Address of var2 variable: %x\n", &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
所以,你了解什么是内存地址以及如何访问它,因此概念的基础已经结束。 现在让我们看看什么是指针。
什么是指针?
pointer是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。 与任何变量或常量一样,必须先声明指针,然后才能使用它来存储任何变量地址。 指针变量声明的一般形式是 -
type *var-name;
这里, type是指针的基类型; 它必须是有效的Objective-C数据类型, var-name是指针变量的名称。 用于声明指针的星号*与用于乘法的星号相同。 但是,在此语句中,星号用于将变量指定为指针。 以下是有效的指针声明 -
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
所有指针的值的实际数据类型,无论是整数,浮点数,字符还是其他,都是相同的,是表示内存地址的长十六进制数。 不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型。
如何使用指针?
很少有重要的操作,我们将经常在指针的帮助下完成。 (a)我们定义一个指针变量, (b)将一个变量的地址赋给一个指针, (c)最后访问指针变量中可用地址的值。 这是通过使用一元运算符*来完成的,该运算符*返回位于其操作数指定的地址处的变量的值。 以下示例使用这些操作 -
#import <Foundation/Foundation.h>
int main () {
int var = 20; /* actual variable declaration */
int *ip; /* pointer variable declaration */
ip = &var; /* store address of var in pointer variable*/
NSLog(@"Address of var variable: %x\n", &var );
/* address stored in pointer variable */
NSLog(@"Address stored in ip variable: %x\n", ip );
/* access the value using the pointer */
NSLog(@"Value of *ip variable: %d\n", *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的指针称为null指针。
NULL指针是一个常量,在几个标准库中定义了零值。 考虑以下程序 -
#import <Foundation/Foundation.h>
int main () {
int *ptr = NULL;
NSLog(@"The value of ptr is : %x\n", ptr );
return 0;
}
编译并执行上述代码时,会产生以下结果 -
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
在大多数操作系统上,程序不允许访问地址0处的内存,因为该内存是由操作系统保留的。 但是,存储器地址0具有特殊意义; 它表示指针不是指向可访问的内存位置。 但按照惯例,如果指针包含null(零)值,则假定它指向任何内容。
要检查空指针,可以使用if语句,如下所示 -
if(ptr) /* succeeds if p is not null */
if(!ptr) /* succeeds if p is null */
Objective-C指针详解
指针有许多但很简单的概念,它们对Objective-C编程非常重要。 以下几个重要的指针概念,对于Objective-C程序员来说应该是清楚的 -
Sr.No. | 概念与描述 |
---|---|
1 | Objective-C - 指针算法 可以在指针上使用四个算术运算符:++, - ,+, - |
2 | Objective-C - 指针数组 您可以定义数组以包含许多指针。 |
3 | Objective-C - 指针指针 Objective-C允许您在指针上指针等等。 |
4 | 将指针传递给Objective-C中的函数 通过引用或地址传递参数都可以通过被调用函数在调用函数中更改传递的参数。 |
5 | 从Objective-C中的函数返回指针 Objective-C允许函数返回指向局部变量,静态变量和动态分配内存的指针。 |