2011-05-03 30 views
-1

我只是一个研究,但我有一个问题参数传递由OBJ-C refrence

- (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;这是正确的方式吗?谢谢!

+0

我是对不起,它的工作正常,只是得到警告这种方式是无效的c99 – prajakta 2011-05-03 05:57:03

+0

我得到冲突类型的交换,这是更正等方式做>> >> – prajakta 2011-05-03 06:00:03

回答

2

如果您想要交换r1r2,您必须传递指针或使用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

+0

谢谢你是对的,但在obj-c我得到警告,因为它的隐式声明交换在C99中是无效的 – prajakta 2011-05-03 06:19:26

+0

您只需要在使用之前声明交换。在文件的顶部添加'void swap(int r1,int r2);'行。 – 2011-05-03 07:18:18

+0

是的声明后,其罚款谢谢:) – prajakta 2011-05-03 07:25:10