首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

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

2012-01-31 
关于objective-c函数参数如何地址传递doChange 的参数是NSData类型,我以为传入指针,在函数内改变了传入参

关于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指向同一个对象,难道不对吗?

热点排行