编译器错误将作为"成员'价格'的请求,而不是结构或联合'

-1 c

我只是想学习C并试图理解结构和指针.我写的一个程序是编译错误如下:

:29:18:错误:要求成员'价格'不是结构或联合.

示例程序:

#include <stdio.h>
#include <stdlib.h>

typedef struct  {
    char *Title;
    float price;
} Book;


int main()
{
    int a  = 10;
    Book *HFJ = malloc(sizeof *HFJ)  ;
    HFJ->Title = "Head First Java";
    HFJ->price = 200;
    void *object;
    object = &a;
    printf("Value of object is %d", * (int*)object);
    printf("Value of HFJ %f", HFJ->price);
    object = HFJ;
    (Book*)object->price = 300;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

你得到错误的那一行就是这一行

(Book*)object->price = 300;
Run Code Online (Sandbox Code Playgroud)

该错误是由于运算符优先级,其中"箭头"运算符的->优先级高于强制转换运算符.

这意味着你的陈述真的是这样的:

(Book*)(object->price) = 300;
Run Code Online (Sandbox Code Playgroud)

这意味着你试图取消引用void *变量object(这是不可能的),然后将price成员转换为Book *.

要纠正它的使用

((Book*)object)->price = 300;
Run Code Online (Sandbox Code Playgroud)