0

大家圣诞快乐:)

我有一个指针问题。尽管我熟悉指针概念,但到目前为止,我还没有像这里描述的那样在 Objective-C 中使用指针。

我这样修改它:

  int countSInteger = 10;

  [self setHMSValues:countSInteger];

- (void) setHMSValues: (int*) timeCat {
  *timeCat = *timeCat - 1;
}

但现在我收到了 EXC_BAD_ACCESS: 在此处输入图像描述

有圣诞老人的暗示吗?

来自瑞士的问候,罗纳德霍夫曼

4

5 回答 5

3

尝试:

- (void) setHMSValues: (int*) timeCat {
*timeCat = *timeCat - 1;
}
于 2012-12-25T05:34:08.443 回答
3

看起来您想要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];
于 2012-12-25T06:00:06.753 回答
1

countInteger”被声明为“ int *”,而您调用的方法需要一个“ int”。

您不认为如果您将“ countInteger”声明为普通的“ int”,您可能会有更好的运气吗?

于 2012-12-25T05:33:53.997 回答
1

为什么使用 int 指针?只需删除 *

于 2012-12-25T05:34:56.400 回答
0

Objective-C 是否支持使用 & 像 C++ 一样通过引用传递?我没有专门检查过 Objective-C,(从来没有需要)但是在 C++ 中,以下内容用于告诉编译器使用 pass-by-reference:

void count(int &var);
于 2012-12-25T05:46:26.443 回答