2011-05-03 55 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