0

皆さん、メリークリスマス:)

ポインターに問題があります。私はポインターの概念に精通していますが、Objective-C でここで説明されている方法でポインターを使用したことはありません。

私はそれを次のように修正しました:

  int countSInteger = 10;

  [self setHMSValues:countSInteger];

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

しかし今、私は EXC_BAD_ACCESS を受け取りました: ここに画像の説明を入力

サンタのヒントは?

スイスからのご挨拶、ロナルド・ホフマン

4

5 に答える 5

3

setHMSValues:整数パラメータの値を計算して返したいようです。ただし、パラメーターは int () へのポインターであり、値が のint *プレーンを渡しています。ポインターはそれ自体が単なる整数値であるため (整数値はメモリ アドレスを表します)、コードはメモリ位置に値を設定しようとしています。したがって、プログラムがメモリ位置 10 の値にアクセスしたり、値を変更したりできないため、「不正なアクセス」エラーが発生します。int1010

あなたがすべきことは、のアドレスcountSIntegerメソッドに渡すことです:

[self setHMSValues:&countSInteger];

ただし、これを行うより良い方法があります。メソッドから値を 1 つだけ返すため、out パラメーターは必要ありません。メソッドを次のように変更できます。

- (int) setHMSValues: (int) timeCat {
  return timeCat - 1;
}

次のように呼び出します。

int countSInteger = 10;

countSInteger = [self setHMSValues:countSInteger];
于 2012-12-25T06:00:06.753 に答える
3

試す:

- (void) setHMSValues: (int*) timeCat {
*timeCat = *timeCat - 1;
}
于 2012-12-25T05:34:08.443 に答える
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++では、コンパイラに参照渡しを使用するように指示するために次のように使用されます。

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