C语言入门-7.结构体与C++引用

结构体-结构体对齐-结构体数组

结构体的定义、初始化、结构体数组

C语言提供结构体来管理不同类型的数据组合。

#include <stdio.h>

struct student{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};//结构体类型声明,注意最后一定要加分号

int main() {
    struct student s = {1001,"ali",'M',20,99,"Shanghai"};
    struct student sarr[3];//定义一个结构体数组变量
    int i;
    //结构体输出必须单独去访问内部成员
    printf("%d %s %c %d %5.2f %s\n",s.num,s.name,s.sex,s.age,s.score,s.addr);
    printf("--------------------------");
//    scanf("%d%s %c%d%f%s",&s.num,s.name,&s.sex,&s.age,&s.score,s.addr);
    for(i = 0;i < 3;i++){
        scanf("%d%s %c%d%f%s",&sarr[i].num,sarr[i].name,&sarr[i].sex,&sarr[i].age,&sarr[i].score,sarr[i].addr);
    }
    for(i = 0;i <3;i++){//结构体数组的输出
        printf("%d %s %c %d %.2f %s\n",sarr[i].num,sarr[i].name,sarr[i].sex,sarr[i].age,sarr[i].score,sarr[i].addr);
    }
//    printf("%d %s %c %d %f %s",s.num,s.name,s.sex,s.age,s.score,s.addr);
    return 0;
}
//输出
1001 ali M 20 99.00 Shanghai
--------------------------
2000 lilil M 22 63 Shanghai
3025 dave F 22 36 Beijing
5362 dliv F 23 32 Hangzhou
2000 lilil M 22 63.00 Shanghai
3025 dave F 22 36.00 Beijing
5362 dliv F 23 32.00 Hangzhou

Process finished with exit code 0

❗ 如果结构体变量已经定义,那么只能对它的每个成员变量单独赋值,如s.nun = 1003; 

结构体对齐

👩‍💻 结构体的大小必须是其最大成员的整数倍!

为什么要对齐?为了CPU高效的去取内存上的数据

#include <stdio.h>

struct student_type1{
    //double是一种浮点类型,8个字节,浮点分为double和float
    double score;
    short age;//short是整型,占2个字节
};

struct student_type2{
    double score;
    int height;//如果两个小存储之和是小于最大长度8,那么它们就结合在一起
    short age;
};

struct  student_type3{
    int height;
    char sex;
    short age;
};
//结构体对齐
int main() {
    struct student_type1 s1;
    struct student_type2 s2;
    struct student_type3 s3;
    printf("s1 size = %d\n", sizeof(s1));
    printf("s2 size = %d\n", sizeof(s2));
    printf("s3 size = %d\n", sizeof(s3));
    return 0;
}
//输出
s1 size = 16
s2 size = 16
s3 size = 8

结构体指针与typedef的使用

结构体指针

一个结构体变量的指针就是该变量所占据的内存段的起始地址。指针变量也可以用来指向结构体数组中的元素,从而能够通过结构体指针快速访问结构体内的每个成员。

#include <stdio.h>

struct student{
    int num;
    char name[20];
    char sex;
};
//结构体指针
int main() {
    struct student s = {100,"alli",'M'};
    struct student sarr[3]={1001,"zhangsan",'F',2500,"lisi",'M',6322,"qiaorv",'M'};
    struct student *p;//定义结构体指针
    p = &s;
    printf("%d %s %c\n",(*p).num,(*p).name,(*p).sex);//方式一通过结构体指针去访问成员
    printf("%d %s %c\n",p->num,p->name,p->sex);//优先使用
    p = sarr;
    printf("%d %s %c\n",p->num,p->name,p->sex);
    printf("-------------------------------------\n");
    p = p + 1;
    printf("%d %s %c\n",p->num,p->name,p->sex);
    return 0;
}
//输出
100 alli M
100 alli M
1001 zhangsan F
-------------------------------------
2500 lisi M

typedef的使用

#include <stdio.h>
//stu 等价于 struct student,pstu等价于 struct student*;
typedef struct student{
    int num;
    char name[20];
    char sex;
}stu,*pstu;

typedef int LLLL;//特定地方使用

//typedef的使用
int main() {
    stu s = {1001,"wangle",'M'};
    stu *p = &s;//定义了一个结构体指针变量
    pstu p1 = &s;//定义了一个结构体指针变量
    LLLL num = 10;
    printf("num = %d,p -> num = %d\n",num,p -> num);
    return 0;
}
//输出
num = 10,p -> num = 1001

C++引用

C++的引用

对于C++,首先新建源文件时,名字需要叫main.cpp,以cpp后缀结尾

在子函数内修改主函数的普通变量的值

#include <stdio.h>
//C++引用
//在子函数内修改主函数的普通变量的值
//当在子函数中要修改主函数中的值,就用引用
void modify_num(int &b){//形参中写&,要称为引用
    b = b + 1;
}

int main() {
    int a = 10;
    modify_num(a);
    printf("after modify_num = %d\n",a);
    return 0;
}
//输出
after modify_num = 11

在子函数内修改主函数的一级指针变量

#include <stdio.h>

void modify_pointer(int *&p,int *q){
    p = q;
}
//子函数内修改主函数的一级指针变量
int main() {
    int *p = NULL;
    int i = 10;
    int *q = &i;
    modify_pointer(p,q);
    printf("after modify_pointer = %d\n",*p);
    return 0;//进程已结束,推出代码为-1073741819,不为0,那么代表进程异常结束
}
//输出
after modify_pointer = 10

Process finished with exit code 0

C++的布尔类型

#include <stdio.h>

int main() {
    bool a = true;
    bool b = false;
    printf("a = %d,b = %d\n",a,b);
    return 0;
}
//输出
a = 1,b = 0
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annabelle.02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值