我在Objective-C中有一些简单的代码,包括一个按钮和一个标签。 当您单击按钮一次时,标签显示:“你打我”,如果你点击它两次,消息将是:“我再次做了”。 但是,如果按下按钮5次或更多,则消息应为:“停止”;
我使用简单的if
和一个使用operator ++
增加的计数器。 问题是:我的计数器以4为步长增加,而不是以1为步长。
这是代码
@implementation hitMe NSString *myString = @""; int *counter = 0; - (IBAction)htM:(id)sender { if ([myString isEqualToString:@""]){ //first hit myString = @"u hit me"; } else { // second and next hits... myString = @"u did it again!"; counter++; } // if I use "counter > 5" it doesn't work, // I have to use 21 if I want the button hit 5 times before // I get the "STOP THAT" message if (counter > 21) { myString = @"STOP THAT "; } [labelOne setStringValue:myString]; // I used this only to check the count value [labelTwo setIntValue:counter]; } @end
你递增的变量counter
是一个指向int的指针,而不是int。 所以编译器转向:
counter++;
成
counter += 4; // sizeof(int) == 4
这是获取内存中下一个单词或您可能指向的下一个单词所需的内容。 这可能看起来很奇怪,但是如果你有一个int数组和一个用来检查它们的指针,那么递增指针会带你到下一个int(这些天大多数架构上都是4个字节)。
将int *counter
更改为int counter
,你应该没问题。
编辑:C语言规范定义了指针算法(当您使用指针添加或减去时会发生什么)这种方式,因为指针数学的最常见用法是导航您指向的数组。 因此,指针的一个增量单位是数组的一个单位,或sizeof(arrayType)
。 char *会给你你想要的行为,因为sizeof(char)
是1。
以上就是c/c++开发分享为什么++运算符将整数增加4而不是1?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541793.html