Bagikan melalui


Deklarasi Pointer

Deklarasi penunjuk menamai variabel penunjuk dan menentukan jenis objek tempat variabel menunjuk. Variabel yang dinyatakan sebagai pointer menyimpan alamat memori.

Sintaksis

declarator:
pointer Memilihdirect-declarator

direct-declarator:
identifier
( declarator )
direct-declarator [ constant-expression Memilih]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-list Memilih)

pointer:
* type-qualifier-list Memilih
* type-qualifier-list Memilihpointer

type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier

type-specifier memberikan jenis objek, yang dapat berupa jenis dasar, struktur, atau serikat. Variabel penunjuk juga dapat menunjuk ke fungsi, array, dan pointer lainnya. (Untuk informasi tentang mendeklarasikan dan menafsirkan jenis pointer yang lebih kompleks, lihat Menginterpretasikan Deklarator yang Lebih Kompleks.)

Dengan membuat type-specifiervoidspesifikasi , Anda dapat menunda jenis yang dirujuk penunjuk. Item semacam itu disebut sebagai "pointer ke void" dan ditulis sebagai void *. Variabel yang dideklarasikan sebagai penunjuk untuk void dapat digunakan untuk menunjuk ke objek dari jenis apa pun. Namun, untuk melakukan sebagian besar operasi pada penunjuk atau pada objek yang ditunjukkannya, jenis yang ditunjukkannya harus ditentukan secara eksplisit untuk setiap operasi. (Variabel jenis char * dan jenis void * kompatibel dengan penetapan tanpa jenis cast.) Konversi tersebut dapat dicapai dengan jenis cast. Untuk informasi selengkapnya, lihat KonversiType-Cast.

type-qualifier dapat berupa const atau volatile, atau keduanya. Kata kunci ini menentukan, masing-masing, bahwa penunjuk tidak dapat dimodifikasi oleh program itu sendiri (const), atau bahwa penunjuk dapat secara sah dimodifikasi oleh beberapa proses di luar kontrol program (volatile). Untuk informasi selengkapnya tentang const dan volatile, lihat Jenis Pengkualifikasi.

Nama declarator variabel dan dapat menyertakan pengubah jenis. Misalnya, jika declarator mewakili array, jenis penunjuk dimodifikasi menjadi penunjuk ke array.

Anda dapat mendeklarasikan penunjuk ke struktur, union, atau jenis enumerasi sebelum anda menentukan struktur, union, atau jenis enumerasi. Anda mendeklarasikan pointer dengan menggunakan struktur atau tag union seperti yang ditunjukkan dalam contoh. Deklarasi tersebut diizinkan karena pengkompilasi tidak perlu mengetahui ukuran struktur atau serikat pekerja untuk mengalokasikan ruang untuk variabel pointer.

Contoh

Contoh berikut mengilustrasikan deklarasi pointer.

char *message; /* Declares a pointer variable named message */

Penunjuk message menunjuk ke variabel dengan char jenis.

int *pointers[10];  /* Declares an array of pointers */

Array pointers memiliki 10 elemen; setiap elemen adalah penunjuk ke variabel dengan int jenis.

int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */

Variabel pointer menunjuk ke array dengan 10 elemen. Setiap elemen dalam array ini memiliki int jenis.

int const *x;      /* Declares a pointer variable, x,
                      to a constant value */

Penunjuk x dapat dimodifikasi untuk menunjuk ke nilai yang berbeda int , tetapi nilai yang poinnya tidak dapat dimodifikasi.

const int some_object = 5 ;
int other_object = 37;
int *const y = &fixed_object;
int volatile *const z = &some_object;
int *const volatile w = &some_object;

Variabel y dalam deklarasi ini dinyatakan sebagai penunjuk konstanta ke int nilai. Nilai yang menunjuk untuk dapat dimodifikasi, tetapi penunjuk itu sendiri harus selalu menunjuk ke lokasi yang sama: alamat fixed_object. Demikian pula, z adalah penunjuk konstan, tetapi juga dinyatakan menunjuk ke nilai int yang tidak dapat dimodifikasi oleh program. Penentu volatile menunjukkan bahwa meskipun nilai const int yang ditunjukkan oleh z tidak dapat dimodifikasi oleh program, itu dapat secara sah dimodifikasi oleh proses yang berjalan bersamaan dengan program. Deklarasi w menentukan bahwa program tidak dapat mengubah nilai yang ditujukan ke dan bahwa program tidak dapat mengubah penunjuk.

struct list *next, *previous; /* Uses the tag for list */

Contoh ini mendeklarasikan dua variabel penunjuk (next dan previous) yang menunjuk ke jenis liststruktur . Deklarasi ini dapat muncul sebelum definisi list jenis struktur (lihat contoh berikutnya), selama list definisi jenis memiliki visibilitas yang sama dengan deklarasi.

struct list
{
    char *token;
    int count;
    struct list *next;
} line;

Variabel line memiliki jenis struktur bernama list. list Jenis struktur memiliki tiga anggota: anggota pertama adalah penunjuk ke char nilai, yang kedua adalah int nilai, dan yang ketiga adalah penunjuk ke struktur lainlist.

struct id
{
    unsigned int id_no;
    struct name *pname;
} record;

Variabel record memiliki jenis idstruktur . pname dinyatakan sebagai penunjuk ke jenis struktur lain bernama name. Deklarasi ini dapat muncul sebelum name jenis ditentukan.

Lihat juga

Deklarasi dan Deklarasi Variabel