Object-C將陣列作為函式引數傳遞

2019-10-16 23:15:06

如果要將一維陣列作為引數傳遞給函式,則必須以下列三種方式之一宣告函式形式引數,並且所有三種宣告方法都會產生類似的結果,因為每個都告訴編譯器接受一個整數指標。類似地,可以將多維陣列作為形式引數傳遞。

方式-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

/* 函式宣告 */
-(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 () {

   /* 一個擁有 5 個元素的陣列 */
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   SampleClass *sampleClass = [[SampleClass alloc]init];
   /* 將指標傳遞給陣列作為引數 */
   avg = [sampleClass getAverage:balance andSize: 5] ;

   /* 輸出返回值 */
   NSLog( @"Average value is: %f ", avg );

   return 0;
}

執行上面範例程式碼,得到以下結果:

2018-11-15 03:28:08.265 main[86840] Average value is: 214.400000

如上所見,就函式而言,陣列的長度無關緊要,因為Objective-C不對形式引數執行邊界檢查。