大家圣诞快乐:)
我有一个指针问题。尽管我熟悉指针概念,但到目前为止,我还没有像这里描述的那样在 Objective-C 中使用指针。
我这样修改它:
int countSInteger = 10;
[self setHMSValues:countSInteger];
- (void) setHMSValues: (int*) timeCat {
*timeCat = *timeCat - 1;
}
但现在我收到了 EXC_BAD_ACCESS:

有圣诞老人的暗示吗?
大家圣诞快乐:)
我有一个指针问题。尽管我熟悉指针概念,但到目前为止,我还没有像这里描述的那样在 Objective-C 中使用指针。
我这样修改它:
int countSInteger = 10;
[self setHMSValues:countSInteger];
- (void) setHMSValues: (int*) timeCat {
*timeCat = *timeCat - 1;
}
但现在我收到了 EXC_BAD_ACCESS:

有圣诞老人的暗示吗?
尝试:
- (void) setHMSValues: (int*) timeCat {
*timeCat = *timeCat - 1;
}
看起来您想要setHMSValues:计算并返回整数参数的值。但是,该参数是一个指向 int ( int *) 的指针,而您传递的是一个int值为10. 因为指针本身只是整数值(整数值表示内存地址),所以代码试图在内存位置设置值10;因此,您会收到“错误访问”错误,因为您的程序无法访问或更改内存位置 10 的值。
你应该做的是将地址传递countSInteger给方法:
[self setHMSValues:&countSInteger];
但是,有一个更好的方法可以做到这一点。由于您只从该方法返回一个值,因此不需要 out 参数。您可以将方法更改为:
- (int) setHMSValues: (int) timeCat {
return timeCat - 1;
}
并这样称呼它:
int countSInteger = 10;
countSInteger = [self setHMSValues:countSInteger];
“ countInteger”被声明为“ int *”,而您调用的方法需要一个“ int”。
您不认为如果您将“ countInteger”声明为普通的“ int”,您可能会有更好的运气吗?
为什么使用 int 指针?只需删除 *
Objective-C 是否支持使用 & 像 C++ 一样通过引用传递?我没有专门检查过 Objective-C,(从来没有需要)但是在 C++ 中,以下内容用于告诉编译器使用 pass-by-reference:
void count(int &var);