it-swarm-id.com

Pemrograman C: casting void pointer ke int?

Katakanlah saya memiliki void * bernama ptr. Bagaimana tepatnya saya harus menggunakan ptr untuk menyimpan int? Apakah cukup untuk menulis

ptr = (void *)5;

Jika saya ingin menyimpan nomor 5? Atau apakah saya harus malloc sesuatu untuk menyimpannya?

15
Tim

Anda menggunakan 5 menjadi void pointer dan menugaskannya ke ptr

Sekarang titik ptr di alamat memori 0x5  

Jika itu yang Anda coba lakukan .. yah, itu berhasil. Anda ... mungkin tidak ingin melakukan itu.

Ketika Anda mengatakan "simpan int", saya akan menebak maksud Anda ingin benar-benar menyimpan nilai integer 5 di memori yang ditunjukkan oleh void*. Selama ada cukup memori yang dialokasikan (sizeof(int)) Anda dapat melakukannya dengan casting ... 

void *ptr = malloc(sizeof(int));
*((int*)ptr) = 5;

printf("%d\n",*((int*)ptr));
32
Brian Roach

Itu akan bekerja pada semua platform/lingkungan di mana sizeof(void*) >= sizeof(int), yang mungkin sebagian besar dari mereka, tapi saya pikir tidak semuanya. Anda tidak seharusnya bergantung padanya.

Jika Anda bisa, Anda harus menggunakan serikat sebagai gantinya:

union {
    void *ptr;
    int i;
};

Maka Anda bisa yakin ada ruang yang cocok dengan kedua jenis data dan Anda tidak perlu pemain. (Hanya saja, jangan coba-coba dereferensi pointer sementara itu mendapat data non-pointer di dalamnya.)

Atau, jika alasan Anda melakukan ini adalah karena Anda menggunakan int untuk menyimpan alamat, Anda sebaiknya menggunakan size_t intptr_tsehingga itu cukup besar untuk menampung nilai pointer apa pun pada platform apa pun.

3
Boann

Pointer selalu menunjuk ke alamat memori. Jadi jika Anda ingin menyimpan variabel dengan pointer, yang ingin Anda simpan di pointer itu adalah alamat memori variabel Anda.

0
Jo.Manurung

cast sudah cukup ..................

0
James