#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”进行修改。
*/ |
|