2011-05-03 1 views
-1

Je viens de faire une recherche, mais je rencontre un problèmepasse argument par refrence dans obj-c

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

Je reçois le type de conflit swap; est-ce la bonne façon de faire cela? Merci!

+0

je suis désolé, son fonctionnement bien, juste eu avertissement de cette façon est invalide dans c99 – prajakta

+0

je reçois type d'échange en conflit, est-ce corr ect façon de faire >> ?? – prajakta

Répondre

2

Si vous souhaitez permuter r1 et r2, vous devez soit passer des pointeurs, soit utiliser des références C++. Notez que l'utilisation de références C++ vous obligera à plonger dans Objective-C++, ce qui dans ce cas signifie que vous nommerez votre fichier .mm au lieu de .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; 
} 

Ensuite, utilisez un de vos mises en œuvre comme ceci:

- (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; 
} 

La sortie, de toute façon:

x = 4, y = 3

+0

merci vous avez raison, mais dans obj-c je reçois un avertissement car sa déclaration implicite de swap est invalide dans C99 – prajakta

+0

Vous avez juste besoin de déclarer swap avant qu'il ne soit utilisé. Ajoutez la ligne 'swid swap (int r1, int r2);' en haut de votre fichier. –

+0

oui après la déclaration, ses beaux merci :) – prajakta