doChange 的参数是NSData类型,我以为传入指针,在函数内改变了传入参数的值,函数的最后一行打印的data说明数据已经变了,不过程序的最后一行打印出的body确没有改变。说明函数的参数是值传递而不是地址传递,如何实现地址传递呢
- (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);
- (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);
- (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];
NSLog(@"%@",data2);
*dataPoint = data2;
NSLog(@"%@",*dataPoint);
}[self doChange:&body];
NSLog(@"%@",body);
- (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];
NSLog(@"%@",data2);
*dataPoint = data2;//改变指针指向的值
NSLog(@"%@",*dataPoint);
}[self doChange:&body];//传入对象地址
NSLog(@"%@",body);
NSData * data2 = [NSData dataWithBytes:buffer length:length];
NSLog(@"%@",data2);
data = data2;你在C中,能直接这样“ data = data2;”地去改变指针的值吗
汗,data和data2都是指针,c里边当然是这么改变指针的值,data = data2表示把data和data2指向同一个对象,难道不对吗?
void alloc(int *ptr)
{
ptr = (int*)malloc(10);
}
int main()
{
int *p;
alloc(p);
}
你跟我说说,p这个时候的值会变吗