加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 为什么运算符将整数增加4而不是1?

发布时间:2020-12-16 10:50:41 所属栏目:百科 来源:网络整理
导读:我在Objective-C中有一些简单的代码,包括一个按钮和一个标签.当您单击按钮一次时,标签显示:“你打我”,如果你点击它两次,消息将是:“我再次做了”.但是,如果按下按钮5次或更多,则消息应为:“停止”; 我使用简单的ifs和使用运算符增加的计数器.问题是:我
我在Objective-C中有一些简单的代码,包括一个按钮和一个标签.当您单击按钮一次时,标签显示:“你打我”,如果你点击它两次,消息将是:“我再次做了”.但是,如果按下按钮5次或更多,则消息应为:“停止”;

我使用简单的ifs和使用运算符增加的计数器.问题是:我的计数器以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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读