指针在Objective-C中的工作原理

指针在Objective-C中的工作原理,objective-c,pointers,Objective C,Pointers,我有一个关于指针在目标C中如何工作的快速问题 在C中,我们有: int a = 1; int *b; b = &a; //b is 1. 但在目标C中,一切都已经是指针了。因此,如果我们有: NSString *a = @"String"; NSString *b; b = a; //I know this syntax is wrong but please bear with me. b等于“字符串”吗?或者b会指向a,它保存值“String” 提前感谢您的帮助

我有一个关于指针在目标C中如何工作的快速问题

在C中,我们有:

int a = 1;
int *b;
b = &a;
//b is 1.
但在目标C中,一切都已经是指针了。因此,如果我们有:

NSString *a = @"String";
NSString *b;
b = a;         //I know this syntax is wrong but please bear with me.
b等于“字符串”吗?或者b会指向a,它保存值“String”


提前感谢您的帮助

B和A都将指向同一内存地址,该地址保存实际字符串“String”

为了澄清这一点,如果编译并运行:

NSString *a = @"String";
NSString *b;
b = a;

NSLog(@"A is %@ %p",a,a);
NSLog(@"B is %@ %p",b,b);
输出为:

2015-03-26 21:35:09.860 ObjCTest[1379:187000] A is String 0x100b25068

2015-03-26 21:35:09.860 ObjCTest[1379:187000] B is String 0x100b25068
我现在确实运行了这段代码,输出显示A和B都指向同一个NSString对象——它位于内存位置0x100b25068,并且包含值“String”

在C中,我们有:

int a = 1;
int *b;
b = &a;
//b is 1.
实际上,
*b==1
b
a
的内存地址(这就是
&a
的意思)

但在目标C中,一切都已经是指针了。因此,如果我们有:

NSString *a = @"String";
NSString *b;
b = a;         //I know this syntax is wrong but please bear with me.
b等于“字符串”吗?或者b会指向a,它保存值“String”


b
a
指向相同的
NSString
对象,类似于C的工作方式。

@Seslyn,我的荣幸:)但请注意
&a
&b
是不同的。它们仍然是两个独立的变量,每个变量位于各自的地址。由于Objective-C是C的超集,任何看起来像C代码的代码都应该具有相同的行为,这包括指针。也就是说,编译器确实会围绕分配注入保留/释放操作来管理内存(ARC)。