关于指针的一些问题

时间:2011-12-05 12:40:11

标签: objective-c

这是一个让我很困惑的基本问题:当*在()中而条件*在没有()的情况下使用时,条件之间的区别是什么?换句话说,int *myPointer(NSString *)description之间有什么区别?

4 个答案:

答案 0 :(得分:2)

首先,没有括号的表格:

NSString *name;

是如何将变量声明为指向某种类型对象的指针。在目标C中,您处理并传递指向Objective C对象的指针,而不是实际对象。 (如果您尝试声明NSString name,即不是指针,编译器将抛出错误。)

格式(NSString *)description的某些内容可能出现在两个不同的上下文中。

第一种形式:

- (int)doSomethingToString:(NSString *)str {

描述了方法的参数类型。换句话说,str是指向NSString的指针。

第二种形式:

// suppose myArray be an array of NSString objects...
int firstStringLength = [(NSString *)[myArray objectAtIndex:0] length];

用于告诉编译器对象具有某种类型。在上面的例子中,我们给编译器一个提示,即从NSArray中抽出的东西是指向NSString的指针。这会阻止编译器抱怨我们调用length,这是一种方法(AKA'选择器'),它存在于NSString(但不适用于类型id)。

N.B。访问集合中的对象(例如NSArray)会返回类型id的内容,它与struct objc_object *同义,即指向某个对象的指针。因此,您经常会在已从数组中删除的对象上看到类型转换。

答案 1 :(得分:0)

如果你选择NSString *myPointer,这意味着你将mypointer声明为一种NSString。如果您正在执行(NSString *)myPointer,这意味着您将myPointer类型转换为NSString类型

答案 2 :(得分:0)

因此,有关数据类型的一些内容:

原始类型,例如unsignedintBOOLdoublefloatchar等。不需要与指针一起使用来表示它们的数字类型,因为它们代表你期望的内容,即内存中的数字。

当您进入更复杂的结构(例如类)时,作为一般经验法则,对于静态方法调用,NSObject引用对象的Class({{1 }},+new+alloc+initialize等)此类数据结构可能无法通过格式为+class的方法返回,因为返回类对象必须通过类数据类型完成,如下所示:-(NSObject) myMethodName。要获取数据类型的类,必须调用类-(Class) myMethodName方法,如下所示:+class一旦有了对象的类,就可以对它做一些有趣的事情,比如直接发送方法来分配一个物体,例如Class myClass = [NSObject class]

现在,当您返回指向某个类的指针时,例如NSObject *myObject = [[[NSObject class] alloc] new];,您返回该类的实例。这样,您可以访问该类的变量(如果它们是公共的),例如-(NSObject *) myMethodName。您还可以访问实例方法,例如Class myClass = [[NSObject alloc] init]->isa-init-description等。使用类的实例,您必须记住履行职责并-class完成后的对象,如果您拥有所有权。

希望这有帮助。我没有,但可以详细介绍releasenumerical pointers

答案 3 :(得分:-1)

在C / C ++中, 一个是(无论你使用什么)指针(指向数组的指针) 第二个是(无论你用什么)指针(数组到指针)。

int * a [10];

声明并分配一个指向int.Each元素的指针数组 被单独解除引用。

int(* a)[10];

声明(不分配)指向int数组的指针 必须取消引用指向数组的指针才能访问每个数组的值 元件。