วิธีกำหนดค่าของโครงสร้างทางอ้อมใน c?

Aug 20 2020

ฉันต้องการทราบวิธีการเข้าถึงสมาชิกตัวแรกของโครงสร้างผ่านตัวชี้ ฉันได้ลองสิ่งนี้:

#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);
}

แต่มันพิมพ์ขยะ จะตั้งค่าให้คล้ายกันได้อย่างไร?

คำตอบ

Barmar Aug 20 2020 at 23:57

งานควรเป็น:

*(int*)p = val;

คุณต้องการที่จะกำหนดให้กับintสมาชิกเพื่อให้ตัวชี้จะต้องมีตัวชี้ไปยังไม่ได้ชี้ไปยังตัวชี้ไปยังint intและค่าที่กำหนดจะต้องเป็นint; เป็นตัวชี้ไปยัง&valint

3 MatthiasBerndt Aug 21 2020 at 00:01

สิ่งที่คุณทำคือการตั้งค่าp->aเป็นที่อยู่ของval(อาจถูกตัดให้เหลือ 32 บิตขึ้นอยู่กับการนำไปใช้งาน)

ในการเข้าถึงฟิลด์ผ่านตัวชี้คุณต้องใช้ที่อยู่ของฟิลด์จากนั้นกำหนดให้กับตัวชี้ที่ถูกอ้างถึง

int *pa = &p->a;
*pa = val;

p->a = valแน่นอนคุณก็สามารถเขียน โปรดทราบว่าp->aเป็นเพียงคำย่อของ(*p).a.