题目

定义图书信息结构体 Book(包含书名、作者与价格),编写函数通过结构体指针接收该结构体并格式化输出图书详情。

输入格式:一行依次输入书名(字符串)、作者(字符串)和价格(浮点数),以空格分隔。

输出格式:按格式输出图书各字段信息,价格保留两位小数。

数据范围与约定:字符串长度不超过 50。

思路与算法

1. 结构体指针与箭头运算符
当通过指针传递结构体时,使用箭头运算符 -> 访问其成员,如 ptr->title,等价于解引用后的 (*ptr).title。

2. 避免大对象值传递拷贝
在 C 语言中,传结构体指针只复制一个地址(通常 4 或 8 字节),相比直接值传递整个结构体能够大幅节省栈内存与拷贝开销。

完整程序

#include <stdio.h>

struct Book {
    int id;
    double price;
    char title[64];
};

int main(void)
{
    struct Book b;
    struct Book *p = &b; // 结构体指针指向变量 b

    // 通过指针访问结构体成员:使用箭头操作符 ->(等价于 (*p).id)
    scanf("%d %lf %63s", &p->id, &p->price, p->title);
    printf("id=%d title=%s price=%.2f\n", p->id, p->title, p->price);
    return 0;
}

运行示例

输入:

1 39.9 CPrimer

输出:

id=1 title=CPrimer price=39.90