gpt4 book ai didi

objective-c - NSInteger = NSInteger -1?

转载 作者:行者123 更新时间:2023-12-01 23:10:42 26 4
gpt4 key购买 nike

我正在尝试做一件非常简单的事情,但我不知道怎么做;

NSInteger * a=10;
a=a-1;
NSlog(@"a=%d",a);

由于某种原因,它显示 a=6

怎么可能?

最佳答案

您的问题是您已将变量 a 声明为指针。大多数 Objective-C 变量都是指针,但 NSInteger 是个异常(exception),因为它只是 typedefintlong.

您的代码应如下所示:

NSInteger a=10;
a=a-1;
NSlog(@"a=%d",a);

当你对一个指针进行数学运算时,你实际上是在移动它指向的内存中的位置。例如,如果 NSInteger 的大小为 4 (sizeof(NSInteger) == 4),将其移动 -1,或者换句话说,将一个结构大小向后移动,指针减 4。当迭代结构数组时,这种机制在 C 中被大量使用,例如

CGPoint myPoints[4];
CGPoint* point = myPoints; //get the first point

for (NSUInteger i = 0; i < 4; i++) {
CGPoint currentPoint = *point;
point++; //moves to the next point, adding sizeof(CGPoint)
}

这称为指针运算,您可以用不同的方式编写它,例如pointer + 1 还有 point[1]1[point] (最后两个实际上等于 *(pointer + 1)).

关于objective-c - NSInteger = NSInteger -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008904/

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