我们知道NSString是一个字符串类, 这个字符串对象中有一个length属性. length属性存储了字符的个数, NSLog就是根据这个数值的多少来约定输出多少个字符
上代码 (因为有一些类型转换操作在ARC中不允许, 所以要运行以下代码请关闭ARC机制)
- int main(int argc, const char * argv[])
- {
-
- NSString *str = @"aaaaaaaa";
- NSString *str1 = @"bbbbbbbb";
- NSString *str2 = @"cccccccc";
-
- NSLog(@"str: %@ length = %ld", str, str.length);
- NSLog(@"str1: %@ length = %ld", str1, str1.length);
- NSLog(@"str2: %@ length = %ld", str2, str2.length);
-
-
- int *p = (int*)str;
- *(p + 6) = 2;
-
- p = (int*)str1;
- *(p + 6) = 3;
-
- p = (int*)str2;
- *(p + 6) = 4;
-
- NSLog(@"str: %@ length = %ld", str, str.length);
- NSLog(@"str1: %@ length = %ld", str1, str1.length);
- NSLog(@"str2: %@ length = %ld", str2, str2.length);
-
- return 0;
- }
复制代码
哈哈以上代码会出现如下效果
每个字符串对象在内存中的首地址加24字节, 就会得到字符串对象_length成员变量的地址. 通过指针修改了这块内存的数值,
当再次调用NSLog时NSLog就会根据我们修改后的数值决定输出多少个字符, 同样 length属性返回的数值也就发生了变化.
指针是多少的强大和自由啊, 但千万不要乱用哦,
|
|