変更するために、ある変数a
を別の変数に置き換えるにはどうすればよいですか?b
b
例えば:
NSString *a = @"a";
NSString *b = @"b";
NSString *c = @"c";
a = b;
a = c;
この場合、の値はb
です@"b"
よね?b
@"c"
を使わずに、の値を作りたいb = c
。おそらく私はポインタを理解しようとすべきです。
私の貧弱な説明を理解して、あなたができるアドバイスをください。
変更するために、ある変数a
を別の変数に置き換えるにはどうすればよいですか?b
b
例えば:
NSString *a = @"a";
NSString *b = @"b";
NSString *c = @"c";
a = b;
a = c;
この場合、の値はb
です@"b"
よね?b
@"c"
を使わずに、の値を作りたいb = c
。おそらく私はポインタを理解しようとすべきです。
私の貧弱な説明を理解して、あなたができるアドバイスをください。
ポインタは、率直に言って、最初はちょっと混乱するので、混乱するかもしれません。これらは、メモリ位置を保持する変数です。同じ場所を保持する2つのポインターがあり、一方のポインターを使用してその場所の内容を変更した場合、もう一方のポインターを介してそれらの新しい内容を表示できます。ただし、それでも同じ場所を指しています。
int x = 10;
// xp is a pointer that has the address of x, whose contents are 10
int * xp = &x;
// yp is a pointer which holds the same address as xp
int * yp = xp;
// *yp, or "contents of the memory address yp holds", is 10
NSLog(@"%i", *yp);
// contents of the memory at x are now 62
x = 62;
// *yp, or "contents of the memory address yp holds", is now 62
NSLog(@"%i", *yp);
// But the address that yp holds has _not_ changed.
あなたのコメントに基づいて、はい、あなたはこれを行うことができます:
int x = 10;
int y = 62;
// Put the address of x into a pointer
int * xp = &x;
// Change the value stored at that address
*xp = y;
// Value of x is 62
NSLog(@"%i", x);
そして、あなたはNSString
sで同じことをすることができますが、そうする正当な理由は考えられません。例のanyint
をNSString *
;に変更します。にint *
なりNSString **
ます。必要に応じて、割り当てとNSLog()
フォーマット指定子を変更します。
NSString * b = @"b";
NSString * c = @"c";
// Put the address of b into a pointer
NSString ** pb = &b;
// Change the value stored at that address
*pb = c;
// N.B. that this creates a memory leak unless the previous
// value at b is properly released.
// Value at b is @"c"
NSLog(@"%@", b);