วิธีกำหนดค่าของโครงสร้างทางอ้อมใน 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
; เป็นตัวชี้ไปยัง&val
int
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
.