[ HTML ] [ Java ] [ Bahasa C ]


Minggu, Mei 02, 2021

Tipe Data size_t pada Bahasa C

size_t adalah tipe data unsigned integral yang didefinsikan dalam berbagai file header seperti:

<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>

Adalah tipe data yang digunakan untuk merepresentasikan ukuran dari objek dalam satuan byte dan karena itu tipe data tersebut digunakan sebagai tipe return oleh operator sizeof. Tipe data tersebut menjamin untuk dapat mengandung ukuran data yang cukup besar dari object besar yang dapat ditangani oleh sistem host. Pada dasarnya ukuran maksimun yang diijinkan adalah tergantung dari kompilator; jika kompilator adalah 32bit maka secara sederhana dibuat typedef untuk unsigned int tetapi jika kompilator adalah 64bit maka typedef adalah untuk unsigned long long. Tipe data size_t tidak pernah bernilai negatif.

Terdapat banyak library fungsi C seperti malloc, memcpy, dan strlen argumen dan tipe return-nya dideklarasikan sebagai size_t. Contoh:

// Deklarasi dari berbagai fungsi standar library.

// Berikut adalah argumen dari 'n' yang mengacu pada
// jumlah blok maksimum yang dapat dialokasikan
// yang dijamin akan menjadi tidak bernilai negatif
void *malloc(size_t n);

// Ketika melakukan copy 'n' bytes dari 's2' ke 's1'
// n harus berada dalam posisi integer yang tidak negatif.
void *memcpy(void *s1, void const *s2, size_t n);

// strlen() menggunakan size_t karena panjang string setidaknya selalu 0.

size_t strlen(char const *s);

size_t atau tipe unsigned apapun mungkin lebih sering digunakan sebagai variabel looping yang umumnya lebih baik atau sama dengan 0.

catatan: Ketika menggunakan object size_t, maka dapat dipastikan bahwa semua hal yang termasuk dalam konteks tersebut akan digunakan, termasuk rumus aritmatik, dengan nilai yang bersifat tidak negatif. Contoh, kompilasi dari program berikut ini mungkin akan memberikan hasil yang berbeda dari yang diperkirakan:

// Program bahasa C untuk mende-

// monstrasikan bahwa

// size_t ataupun

 

// tipe data unsigned int

// apapun harus digunakan

 

// hati-hati pada

// bagian looping

#include<stdio.h>

#define N 10

 

int main()

{

int a[N];

 

// Berjalan normal

for (size_t n=0;n<N;++n) {

a[n] = n;

}

 

// Namun perulangan berkeba-

// likan sifatnya sedikit

 

// mengelabui untuk tipe da-

// ta unsigned yang dapat

 

// menyebabkan terjadi

// infinite loop

for (size_t n = N-1; n >= 0; --n)

printf("%d ", a[n]);

}

Output:
infinite loop dan segmentation fault

5 komentar:

  1. Apa yang dimaksud dengan size_t pada bahasa C?

    BalasHapus
    Balasan
    1. Tipe data size_t adalah tipe data integral unsigned. Tipe data ini mewakili ukuran objek dalam ukuran byte dan dikembalikan oleh operator sizeof. Tipe data ini digunakan untuk melakukan pengindeksan dan penghitungan nilai array, dimana nilai tersebut tidak akan pernah bisa bernilai negatif.

      Hapus
  2. size_t adalah tipe data bilangan bulat unsigned dasar dari bahasa pemrograman C/C++. Tipe data ini adalah jenis hasil yang dikembalikan dari operator sizeof. Ukuran tipe data dapat dipilih sehingg dapat menyimpan ukuran maksimum dari array yang secara teori dimungkinkan dari tipe data apapun. Pada sistem 32bit, size_t akan mengambil ukuran 32bit, sedangkan pada sistem 64bit, size_t akan mengambil ukuran sebesar 64bit.

    BalasHapus
  3. Apa perbedaan antara tipe data int dan size_t pada bahasa C?

    BalasHapus
    Balasan
    1. Tipe data int adalah tipe data bilangan bulat bertanda atau signed, yang mewakili nilai integral positif dan integral negatif. Sedangkan size_t adalah bilangan bulat tak bertanda atau unsigned, yang tidak mendukung nilai dari integral negatif.

      Hapus

Respon komentar 7 x 24 jam, so please be patient :D