doChange 的参数是NSData类型,我以为传入指针,在函数内改变了传入参数的值,函数的最后一行打印的data说明数据已经变了,不过程序的最后一行打印出的body确没有改变。
说明函数的参数是值传递而不是地址传递,如何实现地址传递呢
- C/C++ code
- (void) doChange:(NSData *) data{ int length = [data length]; int seed = 100; NSLog(@"%@",data); NSLog(@"data length:%i",length); Byte buffer[length]; [data getBytes:buffer] ; int i; for(i=0;i<length;i++) { buffer[i] = (Byte)(buffer[i] ^ seed); seed++; //NSLog(@"%i",buffer[i]); } NSData * data2 = [NSData dataWithBytes:buffer length:length]; NSLog(@"%@",data2); data = data2; NSLog(@"%@",data);}[self doChange:body];NSLog(@"%@",body);
------解决方案--------------------
- C/C++ code
- (void) doChange:(NSData **) dataPoint//{ NSData* data = *dataPoint;//取值 int length = [data length]; int seed = 100; NSLog(@"%@",data); NSLog(@"data length:%i",length); Byte buffer[length]; [data getBytes:buffer] ; int i; for(i=0;i<length;i++) { buffer[i] = (Byte)(buffer[i] ^ seed); seed++; //NSLog(@"%i",buffer[i]); } NSData * data2 = [NSData dataWithBytes:buffer length:length]; [color=#FF0000]NSLog(@"%@",data2); *dataPoint = data2;//改变指针指向的值 NSLog(@"%@",*dataPoint);[/color]}[self doChange:&body];//传入对象地址NSLog(@"%@",body);
------解决方案--------------------