STRUKTUR
Tujuan :
1. Menjelaskan cara mendeklarasikan struktur
2. Menjelaskan cara menginisialisasi struktur
3. Menjelaskan cara mengakses elemen struktur
4. Menjelaskan pemebentukan array dari struktur (array of struct)
5. Menjelaskan tentang hubungan antara struktur dengan fungsi
6. Menjelaskan tentang hubungan antara struktur dengan pointer
145
146
struct date {
int month, day, year;
};
yang mendefinisikan sebuah tipe data struktur bernama date yang memiliki tiga buah
elemen (field) berupa : - day
- month
- year
struct date
mengawali dan { int month; masing-masing
mengakhiri int day; disebut field atau
elemen struktur
elemen-elemen int year;
struktur };
struct date {
int month, day, year;
};
struct person {
char name[30];
struct date birthday;
};
student month
birthday day
year
variabel_struktur.nama_field
Untuk memberikan data nama ke field name dari variabel student di atas, maka
pernyataan yang diperlukan misalnya adalah :
Pada pernyataan di atas, student.name dapat dibaca sebagai "field name dari student".
Contoh berikut merupakan instruksi untuk mengisikan data pada field birthday :
student.birthday.day = 10;
148
Sedangkan untuk mendapatkan isi suatu field dari variabel struktur, contohnya :
▪ tgl = student.birthday.day;
▪ puts(student.name);
Contoh pertama merupakan instruksi untuk memberikan isi dari field day ke variabel tgl.
Sedangkan contoh kedua merupakan instruksi untuk menampilkan isi dari field name.
Program berikut merupakan contoh yang melibatkan variabel struktur. Mula-
mula field dari struktur diisi dengan suatu data, kemudian isinya ditampilkan.
#include <stdio.h>
#include <string.h>
Contoh eksekusi :
#include <stdio.h>
main()
{
struct zodiak {
char nama[11];
int tgl_awal;
int bln_awal;
int tgl_akhir;
int bln_akhir;
};
Contoh eksekusi :
#define MAKS 20
.
.
.
struct date { /* definisi dari tipe date */
int month;
int day;
int year;
};
yang artinya, mendeklarasikan array student yang memiliki elemen yang bertipe struct
person sebanyak MAKS
. Setelah array student dideklarasikan, maka ruang yang
disediakan ditunjukkan dalam gambar 9.4 di bawah ini.
birthday
0
1
18
19
Elemen-elemen dari array stuktur tersebut bisa diakses dengan cara sebagai berikut :
#include <stdio.h>
#define MAKS 20
main()
{
int i=0, sudah_benar, jml;
char lagi;
/* memasukkan data */
do
{
printf("Name : ");
152
i++;
jml = i;
/* menampilkan data */
printf("DATA SISWA\n");
for (i=0; i<jml; i++)
{
printf("%d. Name : %s", i+1, student[i].name);
printf(" Birthday : %d-%d-%d\n\n",
student[i].birthday.month,
student[i].birthday.day,
student[i].birthday.year );
};
}
Contoh eksekusi :
Name : Salsabila
Birthday (mm-dd-yyyy) : 10-25-1979
Name : Wildan
Birthday (mm-dd-yyyy) : 4-16-1974
DATA SISWA
1. Name : Salsabila
Birthday : 10-25-1979
2. Name : Wildan
Birthday : 4-16-1974
struct date {
int month, day, year;
} today, tomorrow;
struct person {
char name[30];
struct date birthday;
} student[MAKS];
struct date {
int month, day, year;
} today = {5,14,2001};
154
#include <stdio.h>
main()
{
struct date { /* definisi lokal dari tipe date */
int month;
int day;
int year;
} today;
Contoh eksekusi :
Tampak bahwa elemen dari struktur dilewatkan ke fungsi memakai bentuk pengaksesan
elemen struktur, berupa :
cetak_tanggal(today.month, today.day, today.year);
Apabila nilai suatu elemen struktur diharapkan akan diubah oleh fungsi, maka yang
dilewatkan haruslah berupa alamat dari elemen struktur (pass by reference). Untuk
keperluan ini, operator alamat ditempatkan di depan nama variabel struktur (bukan di
depan nama elemen struktur).
#include <stdio.h>
main()
{
struct koordinat {
int x;
int y;
} posisi;
z = *a;
*a = *b;
*b = z;
}
156
Contoh eksekusi :
main()
{
struct date today;
cetak_tanggal(today);
}
Contoh eksekusi :
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
menyatakan bahwa pos_xy adalah pointer yang menunjuk ke obyek bertipe struktur
koordinat. Adapun penulisan :
(*pos_xy).x
(*pos_xy).x
158
Ungkapan *pos_xy.x mempunyai makna yaitu : "yang ditunjuk oleh pos_xy.x " (sebab
operator titik mempunyai prioritas yang lebih tinggi daripada operator *).
#include <stdio.h>
struct koordinat
{ int x;
int y;
};
main()
{
struct koordinat posisi;
tukar_xy(&posisi);
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
Contoh eksekusi :
Bentuk semacam :
(*pos_xy).x
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
z = pos_xy->x;
pos_xy->x = pos_xy->y;
pos_xy->y = z;
}
Kesimpulan :
• Struktur adalah pengelompokan variabel-variabel yang bernaung dalam satu nama yang
sama, namun tipe datanya tidak harus sama.
• Variabel-variabel yang membentuk suatu struktur, selanjutnya disebut sebagai elemen
dari struktur atau field.
• Suatu struktur didefinisikan dengan menggunakan kata kunci struct.
• Elemen dari suatu variabel struktur dapat diakses dengan menyebutkan nama variabel
struktur diikuti dengan operator titik (‘.’) dan nama dari elemen strukturnya.
• Sebuah struktur juga bisa diinisialisasi pada saat dideklarasikan. Hal ini serupa dengan
inisialisasi array, yaitu elemen-elemennya dituliskan di dalam sepasang kurung
kurawal (‘{ }‘) dengan masing-masing dipisahkan dengan koma.
• Elemen-elemen dari suatu array juga dapat berbentuk sebuah struktur (array of struct).
• Melewatkan sebuah struktur untuk menjadi parameter sebuah fungsi dapat dilakukan
sama dengan pengiriman parameter berupa variabel biasa. Fungsi yang mendapat
kiriman parameter tersebut juga bisa mengirimkan hasil baliknya yang juga berupa
sebuah struktur (pass by reference).
160
• 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 (pointer to struct).
Latihan :
Buatlah potongan program untuk soal-soal di bawah ini
3. Masukkan nilai 10 kepada field loop dari struktur sample yang bertipe struktur
record tsb.