前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言typedef创建变量/指针别名 | 使用结构体指针节省内存

C语言typedef创建变量/指针别名 | 使用结构体指针节省内存

作者头像
CtrlX
发布2022-11-18 17:54:21
1K0
发布2022-11-18 17:54:21
举报
文章被收录于专栏:C++核心编程C++核心编程

一、使用typedef创建结构体变量

区分

一个是给结构体变量起别名,一个是给结构体指针起了别名

代码语言:javascript
复制
typedef struct Student{
	int age;
	int id;
}Student, * Studentp;

写法

创建一个Student结构体变量,常规写法:

代码语言:javascript
复制
struct Student student1; // 不用typedef

但现在,可以直接这样创建:

代码语言:javascript
复制
Student student1; // 若使用typedef 

分析: typedef相当于给结构体 struct Student 定义了一个别名,这个别名叫 Student 。 所以可以直接用Student来声明一个结构体变量

二、 关于结构体成员的调用

若使用 struct Student student1;或者使用了别名创建结构体后访问成员都要使用‘.’运算符

代码语言:javascript
复制
struct Student student1;
student1.age;
代码语言:javascript
复制
/*typedef部分省略*/
Student student1;
student1.age;

如果用Studentp来创建变量呢?

需要分配内存或者让指针指向结构体

代码语言:javascript
复制
Studentp student1; // 注意是Studentp,创建的是结构体指针
student1 = (studentp)malloc(sizeof(Student)); // 指针,要么你主动分配内存,要么你把这个指针指向一个已有的结构体~
student1->age; // 那这里student1就是一个结构体变量的指针,要用->访问

相当于你Studentp创建的是一个结构体的指针,那访问也需要用指针的形式访问!

三、结构体成员也有指针类型情况

代码语言:javascript
复制
typedef struct Student{
	int* age;  //也就是age是int*类型,age是指针。
	int id;
}Student, * Studentp;

那这个时候,就必须要对指针 age 也要初始化!

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
typedef struct Student {
	int* age;
	int id;
}Student, * Studentp;

int main() {
	Studentp A ; // A是指向某一 struct Student 的一个指针
	A = (Studentp)malloc(sizeof(Student)); // 指针 A 初始化
	A->age = (int*)malloc(sizeof(int)); // A->age,age也是一个指针,需要初始化
	*(A->age) =1 ; // A->age是指针,访问变量需要*(A->age)!!!!
	printf("%d", *(A->age)); // 这里也是,如果不整体加*,就会输出地址
	return 0;
}

四、关于为什么结构体成员也有指针类型

原因

其实是方便内存对齐,不造成内存浪费。 示例

代码语言:javascript
复制
typedef struct Student {
	char id; // 这里用了 char 类型
	int age;
}Student, * Studentp;

char第0个的话。age就从第4个内存开始了。 相当于第1,第2,第3个内存是空的,浪费了内存。 所以可以使用指针(默认占4个字节)

不管是任何类型的指针,其字节数都是4字节。

代码语言:javascript
复制
typedef struct Student {
	char* id; // 这里用了 char* 类型
	int age;
}Student, * Studentp;
1234

char*,占4个字节,内存不浪费。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用typedef创建结构体变量
  • 二、 关于结构体成员的调用
  • 三、结构体成员也有指针类型情况
  • 四、关于为什么结构体成员也有指针类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档