Bagaimana cara mengatur nilai struct secara tidak langsung di c?
Saya ingin tahu, cara mengakses anggota struct pertama melalui pointer. Saya sudah mencoba ini:
#include <stdio.h>
#include <stdlib.h>
struct foo
{
int a;
char *str;
};
int main()
{
struct foo *p = malloc(sizeof(struct foo));
int val = 10;
*(int**)p = &val; //set the value of the first member of struct foo
printf("%i\n",p->a);
}
tapi itu mencetak sampah. Bagaimana saya bisa mengaturnya dengan cara yang sama?
Jawaban
Tugasnya harus:
*(int*)p = val;
Anda ingin menetapkan ke int
anggota, jadi penunjuk harus menjadi penunjuk ke int
, bukan penunjuk ke penunjuk int
. Dan nilai yang diberikan haruslah int
; &val
adalah penunjuk ke int
.
Apa yang Anda lakukan di sana adalah menyetel nilai p->a
ke alamat val
(kemungkinan dipotong menjadi 32 bit, tergantung pada implementasinya).
Untuk mengakses bidang melalui penunjuk, Anda harus mengambil alamat bidang dan kemudian menetapkan ke penunjuk yang dirujuk.
int *pa = &p->a;
*pa = val;
Tentu saja Anda juga bisa menulis p->a = val
. Perhatikan bahwa p->a
ini hanyalah singkatan dari (*p).a
.