2016-04-25 4 views
0

Ich möchte wissen, ob es eine Möglichkeit gibt, die ursprünglichen Werte zu aktualisieren, indem Sie den Wert pass by verwenden.Aktualisiere aktuelle Werte mit pass by Wert

Auch möchte ich wissen, ob ich hier Adresse zurück zur Haupt

aktualisiert zurückkehren Ich möchte nicht über einen Verweis verwenden ursprünglichen Werte in Haupt zu tauschen.

#include<stdio.h> 
int a = 100; 
int f =200; 
int *p, * q; 
swap(int, int); 

main() 
    { 
    printf("%d %d\n", a,f); 
    swap(a, f); 

    printf("%d %d\n",a ,f); //values remain same here how to change them 
    } 

    swap(int a, int f) 
    { 
     int t; 
     p=&a; 
     q=&f; 

     t=*p; 
     *p=*q; 
     *q= t; 

    printf("%d %d\n",a ,f); 
    } 
+2

Nein Referenzsemantik kann in C mithilfe von Zeigerparametern und Adressoperationen implementiert werden; Die Zeiger werden in dieser Anordnung als Wert übergeben. –

+1

Bitte formatieren Sie Ihren Code. –

+0

Sie * könnten * ein Makro anstelle einer Funktion verwenden. – EOF

Antwort

2

Ich möchte wissen, ob es eine Möglichkeit ist ursprünglichen Werte zu aktualisieren, indem Pass von Wert verwenden.

Ja, es ist, müssen Sie einen Zeiger übergeben:

void swap(int* a, int* b) 
{ 
    int temp = *a; 
    *a = *b; 
    *b = temp; 
} 

Und es so nennen:

swap(&a, &f); 

Beachten Sie, dass gibt es keine Pass-by-reference in C, das ist eine C++ Funktion. In C wird alles, einschließlich Zeiger, als Wert übergeben.

Und Pass-by-Wert bedeutet Kopie in C, so ist es unmöglich zu ändern, was bestanden wurde.

Auch möchte ich wissen, ob ich Adresse zurück zur Haupt

aktualisiert zurückkehren kann Ja, Sie können. Ändern Sie einfach den Rückgabewert der Funktion in einen Zeigertyp und fügen Sie eine Rückgabeanweisung mit der Adresse der Variablen Ihrer Wahl hinzu.

+0

zurückzugeben. In Frage wird es eindeutig als Wert angegeben. – niyasc

+0

Ich möchte nach Wert –

+4

@niyasc übergeben Es gibt nur übergeben durch Wert in C. Die Zeiger werden nach Wert übergeben. – emlai