收藏文章 楼主

c 结构体 指针

版块:C/C++语言开发   类型:普通   作者:小绿叶技术博客   查看:1019   回复:0   获赞:0   时间:2023-01-17 10:37:14


#include <stdio.h>

struct namebiao{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
};
// 定义一个结构体 自定义名字 namebiao

struct namebiao shuzu[]= {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
} ;
// 再次定义一个结构体 shuzu , 有几组元素省略。 对应传入数组赋值。

void average(struct namebiao *ps, int len){
// 定义函数 , 声明指针结构体 ps 内容为 namebiao 结构体,定义 len 变量. len 的值由 main 函数得知。 main 传入的是结构体很多数据,因此需要定义 ps 指针来接收数据
    int i, num_140 = 0;
    float average, sum = 0;                         // 小数浮点型
// 初始定义变量的值

    for(i=0; i<len; i++){
        sum += (ps + i) -> score;
// 定义 sum 成绩相加变量 sum += 理解为: sum = sum + ps 数组指针的下一个score 元素值  

        printf(" \n \n sum 的值为: %.3f 保留三位小数 \n \n " , sum);

        if((ps + i)->score < 140) num_140++;
    }
    printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
}


int jiegouti(){
// 其他测试函数    
    struct namebiao stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
    //读取结构体成员的值

    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
    return 0;
}

int main(){
    int len = sizeof(shuzu) / sizeof(struct namebiao);
    printf("len 的值为: %d    shuzu 占用字节数:  %ld   namebiao 占用字节数 : %ld" , len , sizeof(shuzu), sizeof(struct namebiao) );
// %ld  有符号长整型,int 是整型

    average(shuzu, len);

    printf("\n   当前执行 结构指针函数,有两种打印结构体的方法: 方法1  (*pstu).name  方法2  pstu->name  \n  \n     ");
    jiegouti();                 // 执行函数,也需要给类型,否则出现隐形声明。
    return 0;
}


// 研究: 寄存器 和 时序




提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:c 结构体 指针

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息