Tha*_*nks 3 c c++ pointers objective-c
在我认为我已经理解它们如何工作之后,我尝试了这个:
NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];
NSLog(@"str1: %x, %@", &str1, str1); //bfffd3cc, one
NSLog(@"str2: %x, %@", &str2, str2); //bfffd3c8, two
str1 = str2;
NSLog(@"str1: %x, %@", &str1, str1); //bfffd3cc, two
Run Code Online (Sandbox Code Playgroud)
指针的值(如str1,str2)是一个内存地址.当您转到该地址时,您将到达存储对象的内存中的"区域".
但是:当我将str2分配给str1时,str1应该具有str2引用的同一对象的内存地址值,对吗?这里奇怪的是,指针的值保持不变(bfffd3cc内存地址),该地址后面的东西会发生变化.这对我来说实际上是完全没有逻辑的;)因为我认为内存地址是对象(或者内存块中对象的主页,是什么).所以我期待这个:
NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];
NSLog(@"str1: %x, %@", &str1, str1); //bfffd3cc, one
NSLog(@"str2: %x, %@", &str2, str2); //bfffd3c8, two
str1 = str2;
NSLog(@"str1: %x, %@", &str1, str1); //bfffd3c8, two
Run Code Online (Sandbox Code Playgroud)
否则,我仍然没有明白这一点."指针变量"的值与"实际值"之间的关系,可以说是位于该存储器地址后面的对象.
请记住,指针变量本身就是一个变量,所以它有一个地址.因此&str1
导致指针变量的地址,并且str1
是一个表达式,它导致指针变量保持的任何内容 - 它指向的对象的地址.
假使,假设:
然后你的指针看起来像这样:
初始化时:
str1
0xbfffd3c8 +---------------+
| |
| 0x00000100 |
| ("one") |
+---------------+
str2
0xbfffd3cc +---------------+
| |
| 0x00000200 |
| ("two") |
+---------------+
Run Code Online (Sandbox Code Playgroud)
=======================================
str1 = str2;
作业完成后:
str1
0xbfffd3c8 +---------------+
| |
| 0x00000200 |
| ("two") |
+---------------+
str2
0xbfffd3cc +---------------+
| |
| 0x00000200 |
| ("two") |
+---------------+
Run Code Online (Sandbox Code Playgroud)