передача аргумента по ссылке в obj-c - PullRequest
0 голосов
/ 03 мая 2011

Я только что провел одно исследование, но у меня проблема

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  int r1=40,r2=5;
  swap(r1,r2);

  NSLog(@" temp is %d",r1);
}

void swap(int r1, int r2)
{
  NSLog(@" m i 1st");
  int temp;
  temp=r1;
  r1=r2;
  r2=temp;

  NSLog(@" temp is %d",r1);
}

У меня конфликтный тип swap; это правильный способ сделать это? Спасибо!

1 Ответ

2 голосов
/ 03 мая 2011

Если вы хотите поменять местами r1 и r2, вы должны либо передать указатели, либо использовать ссылки C ++.Обратите внимание, что использование ссылок C ++ потребует от вас погружения в Objective-C ++, что в данном случае означает именование вашего файла .mm вместо .m.

void swap_with_pointers(int *r1, int *r2)
{
  int temp;
  temp = *r1;
  *r1 = *r2;
  *r2 = temp;
}

void swap_with_references(int &r1, int &r2)
{
  int temp;
  temp = r1;
  r1 = r2
  r2 = temp;
}

Затем используйте одну из ваших реализаций, например так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  int x = 3;
  int y = 4;
  swap_with_pointer(&x, &y); // swap_with_references(x,y);
  printf("x = %d, y = %d", x, y);
  return 0;
}

Выходные данные в любом случае:

x = 4, y = 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...