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

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

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

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

cs 复制代码
#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高效的去取内存上的数据

cs 复制代码
#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的使用

结构体指针

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

cs 复制代码
#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的使用

cs 复制代码
#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后缀结尾

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

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

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

cpp 复制代码
#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++的布尔类型

cpp 复制代码
#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
相关推荐
三品吉他手会点灯2 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
旖-旎2 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
QN1幻化引擎2 小时前
给 AI 做一次「意识体检」——基于 QN1 幻化引擎的灵鉴意识识别框架与 DalinX V5 实测
大数据·数据结构·人工智能·算法·架构
拂拉氏3 小时前
【知识讲解】 AVL树从基本成员的介绍到核心接口的实现(插入、判断、删除等等)
数据结构·算法·avl树
小樱花的樱花3 小时前
Linux 线程的创建
linux·c语言·开发语言
王老师青少年编程4 小时前
csp信奥赛C++高频考点专项训练:【二分答案】案例2:木材加工
c++·二分答案·csp·高频考点·信奥赛·木材加工
aaPIXa6225 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
Augustzero5 小时前
`co_await` 按下暂停键之后:从零看懂 C++20 协程
c++·后端
码少女5 小时前
数据结构——希尔排序
数据结构·排序算法
知无不研6 小时前
c语言和c++中的静态关键字
开发语言·c++·静态关键字