我有以下代码,它增加了一个新变量的现有值:
-(NSString *)increaseId:(NSInteger *)config_id{
NSLog(@"%d",config_id);//Show 0
NSInteger *varfg = 0;//Init
varfg = config_id +1;//In logic here the compiler do 0 + 1 = 1
NSLog(@"%d",varfg);// Show 8 ??
return varfg;
}
如果变量config_id
得到值' 0',当我增加+ 1时,值为8!我想知道为什么会发生这种情况,我该如何解决这个问题?
答案 0 :(得分:2)
- (NSString *)increaseId:(NSInteger)config_id
{
NSLog(@"%d",config_id);
NSInteger varfg = config_id + 1;
NSLog(@"%d",varfg);// Show 8 ??
return [NSString stringWithFormat:@"%d", varfg];
}
指向整数的指针在原文中没有意义(可能在某些情况下有意义,但从你的问题中可以清楚地知道这不是其中之一)。因此,使用一个普通的NSInteger,它不是一个对象,只是一种声明一个原始整数的方法。
出现值“8”的原因是称为指针算法的现象的副作用。在varfg = config_id +1;
行中发生的事情是你在指针中“添加一个”到一个整数。该指针值从位置0开始(因为你在那里设置),但64位机器上的NSInteger的大小是64位,或8个字节。添加将指针递增一个“NSInteger大小的内存量”,从而使其值为8.
答案 1 :(得分:0)
您正在传递一个指向整数的指针,因此您必须取消引用它...
NSLog(@"%d", *config_id);
如果你真的想要一个整数,你应该有这个......
-(NSString *)increaseId:(NSInteger)config_id;
此外,您的签名表明您正在返回NSString*
,但您的代码中没有这样做。
所以,如果你只想传递整数......
-(NSString *)increaseId:(NSInteger)config_id{
NSLog(@"%d", config_id);//Show 0
NSInteger varfg = 0;//Init
varfg = config_id +1;//In logic here the compiler do 0 + 1 = 1
NSLog(@"%d",varfg);// Show 8 ??
return [NSString stringWithFormat:@"%d", varfg];
}