Bagaimana cara mengatur nilai struct secara tidak langsung di c?

Aug 20 2020

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

Barmar Aug 20 2020 at 23:57

Tugasnya harus:

*(int*)p = val;

Anda ingin menetapkan ke intanggota, jadi penunjuk harus menjadi penunjuk ke int, bukan penunjuk ke penunjuk int. Dan nilai yang diberikan haruslah int; &valadalah penunjuk ke int.

3 MatthiasBerndt Aug 21 2020 at 00:01

Apa yang Anda lakukan di sana adalah menyetel nilai p->ake 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->aini hanyalah singkatan dari (*p).a.