专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Iphone

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

发布时间:2010-05-30 01:26:23 文章来源:www.iduyao.cn 采编人员:星星草
关于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指向同一个对象,难道不对吗?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: