gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:34 25 4
gpt4 key购买 nike

我在 Objective-C 中得到了一些简单的代码,其中包含一个按钮和一个标签。当你点击一次按钮时,标签显示:“你打了我”,如果你点击它两次,消息将是:“我又做了一次”。但是,如果您按下按钮 5 次或更多次,则消息应为:“停止”;

我使用了简单的 if 和一个使用运算符 ++ 递增的计数器。问题是:我的计数器以 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 *counter 更改为 int counter 应该没问题。


编辑:C 语言规范以这种方式定义了指针算术(当您使用指针进行加法或减法时会发生什么),因为指针数学的最常见用途是在您指向的数组中导航。因此,指针的一个增量单位是数组的一个单位,或 sizeof(arrayType)。 char* 会给你预期的行为,因为 sizeof(char) 是 1。

关于objective-c - 为什么++ 运算符将整数增加 4 而不是增加 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5521700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com