2016-04-25 13 views
0

値渡しを使用して元の値を更新する方法があるかどうかを知りたいと思います。値渡しを使用して実際の値を更新

また、私は、私はここで、メイン

に戻って更新されたアドレスを返すことができるかどうかを知りたい私がメインで、元の値を交換するために参照することによりパスを使用したくありません。

#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

いいえ。参照セマンティクスは、ポインタパラメータと操作のアドレスを使用してCで実装できます。ポインタはその配列で値渡しされます。 –

+1

コードを書式設定してください。 –

+0

あなたは関数の代わりにマクロを使うことができます。 – EOF

答えて

2

私は値でパスを使用して、元の値を更新する方法があるかどうかを知りたいです。

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

そして、このようにそれを呼び出す:参照渡しCでは、それはだ何もありませんことを

swap(&a, &f); 

はい、あなたがポインタを渡す必要があり、 C++の機能です。 C では、ポインタを含むすべてが値渡しされます。

そして、値渡しは、コピーのCであるため、渡されたものを変更することはできません。

また、私は、私ははいあなたができるメイン

に戻って更新されたアドレスを返すことができるかどうかを知りたいです。関数の戻り値の型をポインタ型に変更し、変数のアドレスを指定したreturn文を追加するだけです。

+0

に返します。 – niyasc

+0

私は値渡しで行いたい –

+4

@niyasc Cで値渡しだけがあります。ポインタは値渡しです。 – emlai

関連する問題