【问题标题】:Changing a variable's value through another variable通过另一个变量更改变量的值
【发布时间】:2026-01-13 08:45:01
【问题描述】:

如何将一个变量a 替换为另一个变量b,以更改b

例如:

NSString *a = @"a";
NSString *b = @"b";
NSString *c = @"c";

a = b;
a = c;

在这种情况下,b 的值是@"b",对吧?我想制作b@"c" 的值,而不使用b = c。可能我应该尝试理解指针。

请理解我糟糕的解释,并给我任何建议。

【问题讨论】:

  • 除了写b = c;之外,我能给你的唯一建议就是学习如何以有意义的方式解释自己。不管我多么想要它,我都无法理解这一点。

标签: objective-c variables pointers variable-assignment


【解决方案1】:

您可能会感到困惑,因为坦率地说,指针起初有点令人困惑。它们是保存内存位置的变量。如果您有两个持有相同位置的指针,并且您使用一个指针更改该位置的 内容,那么您可以通过另一个指针查看这些新内容。不过,它仍然指向同一个位置。

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);

你可以用NSStrings 做同样的事情,虽然我想不出这样做的充分理由。将示例中的任何int 更改为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);

【讨论】:

  • 感谢再次回复!是的,这正是我想做的。但我不能像这样声明“NSString **a;”。所以我将提出下一个问题来关注这一点。谢谢!
  • 我在这里问过 *.com/questions/15146733/… 有空的时候告诉我任何建议。