结构体、结构体指针、C++的引用

目录

1、结构体与结构体指针

1.1 结构体的定义、引用、初始化

1.2 结构体指针

1.3 typedef的使用

2、C++的引用讲解


1、结构体与结构体指针

有时候需要将不同类型的数据组合为一个整体,以便于使用。例如,一名学生有学号、姓名、性别、年龄、地址等属性,如果针对学生的学号、性别、年龄等都单独定义一个变量,那么在有多名学生时,变量就难以分清。为此,C语言提供结构体来管理不同类型的数据组合。

1.1 结构体的定义、引用、初始化

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


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

int main()
{
	struct student s = { 1001,"lele",'m',20,98.5,"shenzhen" };
	printf("%d %s %c\n", s.num, s.name, s.sex);

	struct student sarr[3];
	for (int 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 (int i = 0; i < 3; i++)
	{
		printf("%d %s %c %d %f %s", sarr[i].num, sarr[i].name, sarr[i].sex, sarr[i].age, sarr[i].score, sarr[i].addr);
	}
	return 0;
}

对上述代码结构体大小进行计算,4+1*20+1+4+4+1*30=50*13=63个字节,但实际结构体大小为68个字节,其原因是因为存在对齐,对齐的目的是为了提高cpu访问内存的效率,以空间换时间。

1.2 结构体指针

#include <stdio.h>

struct student
{
	int num;
	char name[20];
	char sex;
};

int main()
{
	struct student s = { 1001,"wangle",'M' };
	struct student* p;
	p = &s;
	printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);//*p等价于s,由于.的优先级高于*,所以要加括号
	printf("%d %s %c\n", p->num, p->name, p->sex);//,指针的成员选择,与上面一句等价

	//结构体初始化
	struct student sarr[3] = { 1001,"lilei",'M',1005,"zhangsan",'M',1003,"liming",'M' };
	int num;
	p = sarr;
	num = p->num++;//num=p->num,p->num++
	printf("num=%d,p->num=%d\n", num, p->num);//1001,1002
	num = p++->num;//num=p->num,p++
	printf("num=%d,p->num=%d\n", num, p->num);//num=1002,p->num=1005

}

  

1.3 typedef的使用

前面定义结构体变量时使用的是语句是struct student s,以这种方式来定义结构体变量有些麻烦,即每次都需要写struct student。此时,可以选择使用typedef声明新的类型名来代替已有的类型名。(typedef的作用就是取别名)

有些程序给int起别名的原因:为了实现代码即注释,提高可读性

#include <stdio.h>

//给结构体类型起别名,叫stu,起了结构体指针类型的别名,叫pstu
typedef struct student
{
	int num;
	char name[20];
	char sex;
}stu,*pstu;

typedef int integer;
int main()
{
	stu s = { 1001,"wangle",'M' };
	pstu p;//stu* p1,p1也是一个结构体指针
	integer i = 10;
	p = &s;
	printf("i=%d,p->num=%d\n", i, p->num);
	return 0;
}

  

2、C++的引用讲解

对于C++,首先新建源文件时,名字的后缀需要是.cpp

#include <stdio.h>

void modifynum(int& b);
int main()
{
	int a = 10;
	modifynum(a);
	printf("a=%d\n", a);
	return 0;
}
//把&写到形参的位置是C++的语法,称为引用,如果在.c里这样写会编译不通
//此时操作b和操作a是等价的
void modifynum(int& b)
{
	b = b + 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值