C语言学习(结构体)

今天初识了结构体,并了解了一些运算符的优先级,下面将我今天所学内容分享给大家。

结构体成员访问操作符

1. 结构体定义与初始化

// 定义结构体类型student,并声明全局变量s2和s3
struct student
{
    char name[20];  // 姓名,字符数组
    int age;        // 年龄,整型
    int score;      // 分数,整型
    int id;         // 学号,整型
}s2, s3;            // 定义结构体全局变量s2和s3

int main()
{
    int a = 10;
    struct student s1; // 定义一个结构体局部变量s1
    return 0;
}

2. 结构体初始化方式

struct student
{
    char name[20];
    int age;
    float score;  // 分数改为浮点型
    int id;
};

int main()
{
    int a = 10;
    // 方式1:顺序初始化
    struct student s1 = { "张三", 20, 90.5f, 1001 };
    
    // 方式2:指定成员初始化(C99标准引入)
    struct student s2 = {.age=20,.score=80.5f,.id=19029,.name="王麻子"};
    return 0;
}

3. 嵌套结构体

// 定义地址结构体
struct address
{
    char city[20];      // 城市
    int phone_number;   // 电话号码
};

// 定义学生结构体,嵌套address结构体
struct student
{
    char name[20];
    int age;
    struct address add; // 嵌套结构体
    float score;
    int id;
};

int main()
{
    // 初始化嵌套结构体
    struct student s1 = { "张三",20,{"beijing",10086},99.3f,10098 };
    
    // 修改结构体成员
    s1.age = 21; // 直接修改整型成员
    
    // 注意:数组修改需要使用strcpy函数
    // strcpy(s1.name, "李四");
    
    // 打印结构体成员
    printf("%s\n", s1.name);
    printf("%d\n", s1.age);
    printf("%s\n", s1.add.city);
    printf("%d\n", s1.add.phone_number);
    printf("%f\n", s1.score);
    printf("%d\n", s1.id);
    return 0;
}

运算符优先级

1. 前置和后置递减运算符

int main()
{ 
    int a = 10;
    int b = 10;
    
    // 前置递减:先减1再使用
    int c = a + --a; // 先将a减1变为9,再计算9+9=18
    printf("%d\n", c); // 输出18
    
    // 后置递减:先使用再减1
    int d = b + b--; // 先计算10+10=20,再将b减1变为9
    printf("%d\n", d); // 输出20
}

2. 多个前置递增运算符

int main()
{
    int i = 1;
    // 注意:多个前置递增在同一个表达式中是未定义行为(UB)
    // 不同编译器可能有不同实现
    // 在GCC中通常会先完成所有前置递增,再进行加法运算
    int ret = (++i) + (++i) + (++i); // 3个4相加=12
    printf("%d\n", ret); // 输出12
    printf("%d\n", i);   // 输出4
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值