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 */
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 */
0 komentar:
Posting Komentar