懒得动 2016-12-26 08:49 采纳率: 50%
浏览 971
已采纳

C语言 struct结构体 发现的一个问题 百思不得其解,求大神为我解惑

代码如下

#define _CRT_SECURE_NO_WARNINGS//vs报scanf警告
#include<stdio.h>
#include<string.h>

struct Student
{
    char name[20];
    char age;
    char sex;
};
int main() {
    struct Student st[] = { {"aaa",25,1},{"bbb",40,0}, {"ccc",30,1},{"ddd",34,1},{"eee",79,0} };//声明且初始化
    int num = sizeof(st) / sizeof(st[0]);//计算出成员数量
    printf("%d\n", sizeof(st));//这里输出结构体数组st所占的内存大小,这里是110byte,5个成员,每个成员22byte
    for (int i = 0; i < num; i++)//冒泡排序,以年龄排序
    {
        for (int j = 0; j < num - i; j++)
        {
            if (st[j].age > st[j + 1].age)
            {
                st[num] = st[j];//这里我突发奇想把大的放置在数组后面,程序运行起来没问题,不知道实际上能不能这样???
                st[j] = st[j + 1];
                st[j + 1] = st[num];
            }
        }
    }
    scanf("%20s", st[5].name);//向数组添加新成员
    scanf("%d", &st[5].age);
    scanf("%d", &st[5].sex);
    num = sizeof(st) / sizeof(st[0]);//问题来了!这里怎么还是5,不是6呢????那怎么输出新成员的信息呢???
    printf("%d\n", sizeof(st));
    for (int i = 0; i < num;i++)
    {
        printf("%s,%d,%d\n", st[i].name, st[i].age, st[i].sex);
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • shen_wei 2016-12-26 09:20
    关注
     struct Student st[] = { {"aaa",25,1},{"bbb",40,0}, {"ccc",30,1},{"ddd",34,1},{"eee",79,0} };  数组初始化时就是[5],数组下标是 0 - 4
    
     if (st[j].age > st[j + 1].age)  //可以实现年龄从小到大。。
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波