Senin, 12 Mei 2014

Semua argumen di C tersebut diteruskan oleh nilai .
C menyediakan kemampuan untuk simulasi call-by - reference menggunakan pointer dan operator indirection.Untuk melewati sebuah variabel dengan reference , terapkan operator alamat ( & ) pada nama variabel .
Ketika alamat dari variabel dilewatkan ke fungsi, operator indirection ( * ) dapat digunakan dalam fungsi untuk mengubah nilai di lokasi tersebut dalam memori pemanggil . Fungsi yang menerima alamat sebagai argumen harus menentukan parameter pointer untuk menerima alamat . Compiler tidak membedakan antara fungsi yang menerima pointer dan fungsi yang menerima array tunggal - subscript . Sebuah fungsi harus mengetahui  ketika itu menerima sebuah array atau  satu variabel yang dilewatkan dengan reference . Ketika compiler bertemu dengan parameter fungsi untuk array tunggal subscript dalam bentuk int b [ ] , compiler mengubah parameter ke notasi pointer int * b .

Contoh 1:

/* Fig. 7.6: fig07_06.c
 Cube a variable using call-by-value */
 #include <stdio.h>

int cubeByValue( int n ); /* prototype */

int main( void )
 {
    int number = 5; /* initialize number */

     printf( "The original value of number is %d", number );

      /* pass number by value to cubeByValue */
      number = cubeByValue( number );

      printf( "\nThe new value of number is %d\n", number );
      return 0; /* indicates successful termination */
} /* end main */

/* calculate and return cube of integer argument */
int cubeByValue( int n )
{
return n * n * n; /* cube local variable n and return result */
} /* end function cubeByValue */

Output: 


Contoh 2:
/* Fig. 7.7: fig07_07.c
 Cube a variable using call-by-reference with a pointer argument */

#include <stdio.h>

void cubeByReference( int *nPtr ); /* prototype */
int main( void )
 {
   int number = 5; /* initialize number */

    printf( "The original value of number is %d", number );

     /* pass address of number to cubeByReference */
     cubeByReference( &number );

      printf( "\nThe new value of number is %d\n", number );
      return 0; /* indicates successful termination */
 } /* end main */

/* calculate cube of *nPtr; modifies variable number in main */
void cubeByReference( int *nPtr )
{
*nPtr = *nPtr * *nPtr * *nPtr; /* cube *nPtr */
} /* end function cubeByReference */

Output:

0 komentar:

Posting Komentar