Objective-c-passing-arrays-to-functions
提供:Dev Guides
Objective-Cで関数引数として配列を渡す
関数の引数として1次元配列を渡す場合、次の3つの方法のいずれかで関数仮パラメーターを宣言する必要があり、3つの宣言メソッドはすべて、コンパイラーに整数ポインターが行くことを伝えるため、同様の結果を生成します受信する。 同様に、多次元配列を仮パラメータとして渡すことができます。
Way-1
次のように、ポインタとしての仮パラメータ。 次の章でポインターとは何かを学習します。
- (void) myFunction(int *) param {
.
.
.
}
ウェイ2
次のようなサイズの配列としての仮パラメータ-
- (void) myFunction(int [10] )param {
.
.
.
}
方法-3
次のようにサイズのない配列としての仮パラメータ-
-(void) myFunction: (int []) param {
.
.
.
}
例
今、別の引数と一緒に引数として配列を取り、渡された引数に基づいて、次のように配列を介して渡された数値の平均を返す、次の関数を考えます-
-(double) getAverage:(int []) arr andSize:(int) size {
int i;
double avg;
double sum;
for (i = 0; i < size; ++i) {
sum += arr[i];
}
avg = sum/size;
return avg;
}
さて、次のように上記の関数を呼び出しましょう-
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
/*function declaration*/
-(double) getAverage:(int []) arr andSize:(int) size;
@end
@implementation SampleClass
-(double) getAverage:(int []) arr andSize:(int) size {
int i;
double avg;
double sum =0;
for (i = 0; i < size; ++i) {
sum += arr[i];
}
avg = sum/size;
return avg;
}
@end
int main () {
/*an int array with 5 elements*/
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
SampleClass *sampleClass = [[SampleClass alloc]init];
/*pass pointer to the array as an argument*/
avg = [sampleClass getAverage:balance andSize: 5] ;
/*output the returned value*/
NSLog( @"Average value is: %f ", avg );
return 0;
}
上記のコードを一緒にコンパイルして実行すると、次の結果が生成されます-
2013-09-14 03:10:33.438 demo[24548] Average value is: 214.400000
ご覧のとおり、Objective-Cは仮パラメータの境界チェックを実行しないため、関数に関する限り、配列の長さは重要ではありません。