A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们知道NSString是一个字符串类, 这个字符串对象中有一个length属性. length属性存储了字符的个数, NSLog就是根据这个数值的多少来约定输出多少个字符
上代码   (因为有一些类型转换操作在ARC中不允许, 所以要运行以下代码请关闭ARC机制)
  1. int main(int argc, const char * argv[])
  2. {
  3.    
  4.     NSString *str  = @"aaaaaaaa";
  5.     NSString *str1 = @"bbbbbbbb";
  6.     NSString *str2 = @"cccccccc";
  7.    
  8.     NSLog(@"str: %@   length = %ld", str, str.length);
  9.     NSLog(@"str1: %@  length = %ld", str1, str1.length);
  10.     NSLog(@"str2: %@  length = %ld", str2, str2.length);
  11.    
  12.    
  13.     int *p = (int*)str;
  14.     *(p + 6) = 2;
  15.         
  16.     p = (int*)str1;
  17.     *(p + 6) = 3;
  18.         
  19.     p = (int*)str2;
  20.     *(p + 6) = 4;
  21.    
  22.     NSLog(@"str: %@   length = %ld", str, str.length);
  23.     NSLog(@"str1: %@  length = %ld", str1, str1.length);
  24.     NSLog(@"str2: %@  length = %ld", str2, str2.length);
  25.    
  26.     return 0;
  27. }
复制代码

哈哈以上代码会出现如下效果





       每个字符串对象在内存中的首地址加24字节, 就会得到字符串对象_length成员变量的地址.  通过指针修改了这块内存的数值,
当再次调用NSLog时NSLog就会根据我们修改后的数值决定输出多少个字符, 同样 length属性返回的数值也就发生了变化.  
指针是多少的强大和自由啊, 但千万不要乱用哦,



7 个回复

倒序浏览
涨姿势 类
回复 使用道具 举报
讲解的挺详细的,受教了
回复 使用道具 举报
我是小菜蛋 来自手机 中级黑马 2015-5-1 13:00:44
板凳
讲的好,厉害厉害
回复 使用道具 举报
长长见识~~
回复 使用道具 举报
受教了  
回复 使用道具 举报
讲解的挺详细的,受教了
回复 使用道具 举报
路过。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马