在objective-c中传递指针值

时间:2014-06-11 01:28:12

标签: objective-c

我只是学习objc语言,所以我的问题很愚蠢,但我仍然非常好奇,我想把一个objc实例指针传递给另一个变种,所以我可以在C中做到这一点

char *astr = malloc(sizeof(char) * 90);
void *copystr = astr;
sprintf(astr, "hello %s", "me");
// insert code here...
NSLog(@"|%s| copy to |%s|", astr, copystr);

但在objc中,它无论如何都不起作用。

NSString *conststr = @"ha!damn!dead!";

//if we pass the pointer to anoter
id *otherSpaceStr = conststr; //this is noway to work
void thirdSpaceStr = conststr; //void won't work too

所以我的问题毕竟是它们都是指针,为什么不能通过它们。 enter image description here enter image description here

我查看调试窗口,发现它们不仅是指针,它们似乎也有类型 enter image description here

1 个答案:

答案 0 :(得分:1)

多数民众赞成因为id已经是一个指针。来自Apple文档。

typedef struct objc_object *id;

如您所见,id表示“指针指向任何类型”。这意味着,当您将NSString分配给otherSpaceStr(之前为id *)时,您将其分配给指针指针

 NSString *conststr = @"ha!damn!dead!";     // pointer to NSString
 id otherSpaceStr = conststr;               // pointer to anything

所以请记住,id已经是一个指针,并且不需要两个级别的间接(id *)。