2016-04-05 19 views
0

この変数を関数のパラメータに渡すことで変数の値を増やすことができます。関数パラメータの変数値を増やす

int y=0; 
void someFunc(int a); 
somefunc(y+50); 
NSLog(@"[email protected]",y); 
prints "y = 50" 

あなたはこのよう

someFunc(y=y+50); 
someFunc(y=+50); 

それを行うが、多分、ポインタを使用して、これを達成するが、よりエレガントな方法であることができますか?例えば

someFunc(*y+50); 

これは、私がcurrentXの値が、私は関数パラメータでそれをインクリメントするたびに更新されていることを維持したい私はこの

-(void)drawRect:(CGRect)rect 
{ 
    CGFloat currentX = 0; 
    CGFloat currentY = height/2; 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(ctx, 5); 
    CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor); 
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor); 

    CGContextMoveToPoint(ctx,currentX, currentY); 
    CGContextAddLineToPoint(ctx, currentX=currentX+50, currentY - 200); 
    CGContextAddLineToPoint(ctx, currentX=+50, currentY - 200); 
    CGContextAddLineToPoint(ctx, currentX=+50, currentY - 200); 
    CGContextAddLineToPoint(ctx, currentX=+50, currentY - 200); 

    CGContextDrawPath(ctx, kCGPathStroke); 
} 

を達成したい私のコードの抜粋です。それを得る?

+0

'someFunc(y = y + 50); 'という文は無意味です。 'y'はパラメータの式を書いたので変更されています。 'someFunc()'が呼び出されても何の違いもありません。 – Avi

+0

@Aviまあ、それは彼が期待していることです:値をargとして取り、オフセットを追加する。 –

+0

'y = y + 50'を渡すと、元の値ではなく、関数にインクリメントされた値(例では50)が渡されます。 –

答えて

0

変数にポインタを渡すことでこれを行うことができます。これは「参照による呼び出し」「アウトパラメータ」またはと呼ばれる:

void someFunc(int * a, int o) 
{ 
    … 
    *a = *a + o; 
} 

int y = 0; 
someFunc(&y, 50); 
// y is y+o 
+0

この場合の関数は、OPが変更できないAPI関数です。 – Lundin

0

あなたはあなたが、その場合には、関数を呼び出す前に、値を変更する必要が次のいずれかの

x = x + something; 
func(x); 

かもし関数を呼び出した後に値を変更する必要がある場合は、次のようにします。

func(x); 
x = x + something; 

常識。


注:パラメータリスト内の割り当てとfunc(x=something)よう決して書き込みコード。あなたがそうする習慣がある場合は、すぐにfunc(x, x=something) // BAD, unspecified behaviorのような評価の順序のバグを書きます。


あなたは関数内で値を変更する必要がある場合あるいは、あなたがそのアドレスを渡すことができます。

void func (int* param) 
{ 
    *param = something; 
} 
... 
func(&x); 

しかし、機能があなたによって書かれている場合は、obviosulyのみこれを行うことができます。これらの関数は明らかにAppleライブラリの一部であるため、ここのケースはそうではないようです。

関連する問題