Sesuai dengan pembelajaran sebelumnya, pada kesempatan ini saya akan share tentang melewatkan struktur ke dalam fungsi pada pemrograman C/C++. Sesuai pada program cetak1.c pada pembahasan sebelumnya. Semua elemen dari struktur dikirimkan ke fungsi cetak_tanggal(), dengan maksud nilai elemen dari struktur akan ditampilkan di layar. Untuk keadaan seperti ini, lebih baik jika parameter fungsi diubah menjadi bentuk struktur, sehingga parameter fungsi tidak lagi sebanyak tiga buah, melainkan hanya satu. Selengkapnya, perhatikan program di bawah ini.
/* File program : cetak2.c Melewatkan struktur sebagai parameter fungsi */
#include <stdio.h>
#include <stdlib.h>
struct date { /* definisi global dari tipe date */
#include <stdio.h>
#include <stdlib.h>
struct date { /* definisi global dari tipe date */
int month;
int day;
int year;
};
void cetak_tanggal(struct date);
main() {
struct date today;
printf("Enter the current date (mm-dd-yyyy): ");
scanf("%d-%d-%d", &today.month, &today.day, &today.year);
cetak_tanggal(today);
} void cetak_tanggal (struct date now) {
static char *nama_bulan[] = { "Wrong month", "January", "February",
"March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" }
; printf("Todays date is %s %d, %d\n\n", nama_bulan[now.month], now.day, now.year);
}
Contoh eksekusi :
Enter the current date (mm-dd-yyyy): 5-29-2001
Todays date is May 29, 2001
Struktur dan Pointer (Pointer ke Struktur)
void tukar_xy(struct koordinat *pos_xy) {
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
void cetak_tanggal(struct date);
main() {
struct date today;
printf("Enter the current date (mm-dd-yyyy): ");
scanf("%d-%d-%d", &today.month, &today.day, &today.year);
cetak_tanggal(today);
} void cetak_tanggal (struct date now) {
static char *nama_bulan[] = { "Wrong month", "January", "February",
"March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" }
; printf("Todays date is %s %d, %d\n\n", nama_bulan[now.month], now.day, now.year);
}
Contoh eksekusi :
Enter the current date (mm-dd-yyyy): 5-29-2001
Todays date is May 29, 2001
Struktur dan Pointer (Pointer ke Struktur)
Jika sebuah struktur mengandung banyak field dan diputuskan bahwa keseluruhan field-nya akan diubah oleh fungsi, maka cara yang efisien adalah dengan melewatkan (passing) alamat dari struktur. Dengan demikian pada pendefinisian fungsi, parameter formalnya berupa pointer yang menunjuk ke struktur. Masalah pointer ke struktur dapat diterapkan dalam program posisi1.c.
Argumen dari fungsi tukar_xy() dapat disederhanakan menjadi satu argumen saja, yakni sebagai berikut :
....void tukar_xy(struct koordinat *pos_xy) {
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
Pada definisi fungsi di atas, struct koordinat *pos_xy menyatakan bahwa pos_xy adalah pointer yang menunjuk ke obyek bertipe struktur koordinat.
Adapun penulisan :
(*pos_xy).x menyatakan : elemen bernama x yang ditunjuk oleh pointer pos_xy
Perlu diperhatikan bahwa penulisan tanda kurung seperti pada contoh (*pos_xy).x merupakan suatu keharusan. Sebab *pos_xy.x mempunyai makna yang berbeda dengan (*pos_xy).x Ungkapan *pos_xy.x mempunyai makna yaitu : "yang ditunjuk oleh pos_xy.x " (sebab operator titik mempunyai prioritas yang lebih tinggi daripada operator *). /* File program : posisi2.c Fungsi parameternya berupa pointer yg menunjuk ke struktur */
#include <stdio.h>
#include <stdlib.h>
struct koordinat {
int x;
int y;
};
struct koordinat {
int x;
int y;
};
void tukar_xy(struct koordinat *);
main()
{
struct koordinat posisi;
printf ("Masukkan koordinat posisi (x, y) : ");
scanf ("%d, %d", &posisi.x, &posisi.y);
printf ("x, y semula = %d, %d\n", posisi.x, posisi.y);
tukar_xy (&posisi);
printf ("x, y sekarang = %d, %d\n", posisi.x, posisi.y);
}
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = (*pos_xy).x; (*pos_xy).x = (*pos_xy).y; (*pos_xy).y = z;
}
Contoh eksekusi :
Masukkan koordinat posisi (x, y) : 34, 21 x, y semula = 34, 21
x, y sekarang = 21, 34
Bentuk semacam :
(*pos_xy).x dapat ditulis dengan bentuk lain menjadi pos_xy->x
Dalam C operator -> (berupa tanda minus - diikuti dengan tanda lebih dari >) disebut sebagai operator panah. Dengan menggunakan operator panah, maka fungsi tukar_xy() dalam program posisi2.c dapat ditulis menjadi
void tukar_xy(struct koordinat *pos_xy) {
int z;
z = pos_xy->x;
pos_xy->x = pos_xy->y;
pos_xy->y = z;
}
Demikianlah pembahasan pada kali ini, semoga dengan pembahasan yang saya berikan dapat menambah wawasan dan pemahaman mengenai struktur dan pointer dalam pemrograman C. Salam semangat dan salam sukses.
Tidak ada komentar:
Posting Komentar
Silahkan Berikan Komentar Anda untuk Kesempurnaan Blog ini..