当前位置: 代码迷 >> Iphone >> 关于objective-c函数参数怎么地址传递
  详细解决方案

关于objective-c函数参数怎么地址传递

热度:261   发布时间:2016-04-25 06:52:08.0
关于objective-c函数参数如何地址传递
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);
------解决方案--------------------
探讨

引用:

引用:

你在C中,能直接这样“ data = data2;”地去改变指针的值吗


汗,data和data2都是指针,c里边当然是这么改变指针的值,data = data2表示把data和data2指向同一个对象,难道不对吗?