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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

王鹏飞1

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 1. 按照题目要求定义字符串
        NSString *str = @"iphoneAndroid";
        //    再次定义一个新的字符串指针指向"iphoneAndroid"
        NSString *str2 = @"iphoneAndroid";
        
        // 2. 新建一个可变字符串指针指向“iphoneAndroid”
        NSMutableString *mStr = [NSMutableString stringWithString:str];
        
        //    输出str、str2、mStr三个指针所指向内容的地址(&*str == &*str2)
        NSLog(@"str : %@,地址为:%p", str, &*str);
        NSLog(@"str2: %@,地址为:%p", str2, &*str2);
        NSLog(@"mStr: %@,地址为:%p", mStr, &*mStr);
        
        // 3. 获取需要删除的字符串的范围
        NSRange rangOfTarget = [str rangeOfString:@"Android"];
        
        // 4. 对字符串进行删除操作
        [mStr deleteCharactersInRange:rangOfTarget];
        
        // 5. 将修改后的字符串赋值给原有字符串
        str = mStr;
        
        NSLog(@"\n\n*********************\n\n");
        
        //    再次输出str、str2、mStr三个指针所指向内容的地址(&*str == &*str2)
        NSLog(@"str : %@,\t地址为:%p", str, &*str);
        NSLog(@"str2: %@,\t地址为:%p", str2, &*str2);
        NSLog(@"mStr: %@,\t地址为:%p", mStr, &*mStr);
        
    }
    return 0;
}

/*
打印结果为:
2015-10-26 06:22:54.166 测试题8.1[2626:136761] str : iphoneAndroid,地址为:0x100001048
2015-10-26 06:22:54.168 测试题8.1[2626:136761] str2: iphoneAndroid,地址为:0x100001048
2015-10-26 06:22:54.168 测试题8.1[2626:136761] mStr: iphoneAndroid,地址为:0x1002068f0
2015-10-26 06:22:54.168 测试题8.1[2626:136761]

*********************

2015-10-26 06:22:54.169 测试题8.1[2626:136761] str : iphone,        地址为:0x1002068f0
2015-10-26 06:22:54.169 测试题8.1[2626:136761] str2: iphoneAndroid,        地址为:0x100001048
2015-10-26 06:22:54.169 测试题8.1[2626:136761] mStr: iphone,        地址为:0x1002068f0
Program ended with exit code: 0

则说明:测试题8中的方法只是将字符串内容拷贝到可变字符串中,重新分配了内存,并进行相应的删除、输出操作
        然后再将原来字符串的指针 str 指向可变数组(即修改后的可变数组),
        但是,原地址的字符串内容并没有改变,依旧为iphoneAndroid,只是str指针的指向变了而已。
        如果通过这种方式也叫改变字符串的话,直接赋值str = @"iphone" 就可以了,何必绕一大圈子?
        因此证明:不能对如下定义的字符串: NSString * str=@“iphoneAndroid”进行修改。
*/

3 个回复

倒序浏览
也不知道我的证明对不对,求交流(PS:有报IOS14期的同仁么)
回复 使用道具 举报
关注中。
回复 使用道具 举报
..........{:2_41:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马