数据结构预备知识总结

本文深入讲解C语言中的sizeof运算符使用方法及注意事项,探讨结构体的定义与使用,解析typedef的作用与优势,详解malloc与free如何高效管理内存,以及介绍数据结构的基础概念。

一、sizeof

介绍

sizeof

1.是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数。

2.是单目操作符,类似于++,–

3.sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。

使用方法

1.用于数据类型

sizeof使用形式: sizeof(type)。数据类型必须用括号括住: sizeof(int)

2.用于变量

sizeof使用形式: sizeof(var_name) 或 sizeof var_name 
变量名可以不用括号括住.如sizeof (var_name),sizeof var_name等都是正确形式

sizeof与其他操作符的关系

sizeof的优先级为2级,比/、%等3级运算符优先级高。
它可以与其他操作符一起组成表达式:
例如: int i = 10;
i * sizeof(int);


二、结构体类型

分为三种
struct student{
int num;
};
struct student S;

struct student{
int num;
}S;

struct{
int num;
}S;
结构体名称去掉的变量使用
struct{
int num;
}S,*p;
p=&S;
//三种引用num方法
//s.num;
//p->num;
//(*p).num;

三、typedef(类型重定义)

用处

1、typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。

2.定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。例如以下

char* pa, pb;     

以下可行:

typedef char* PCHAR;  
PCHAR pa, pb;    

四、malloc

void *malloc(long NumBytes)

该函数分配了NumBytes个字节,并返回类型是void ,所以通常需要强制类型转换成赋值给某变量的该变量的类型(虽然任何类型的指针都可以转换成void ,但最好还是进行强制类型转换,因为这样可以躲过一些编译器检查)
该函数返回值:分配的存储空间首地址(返回值无类型即void*,所以要强制转换)

所需头文件

该函数所需头文件是#include

malloc与new的区别

1.new返回指定类型的指针,并且可以自动计算所需内存大小(即不需要sizeof())。而malloc则必须由我们自己计算出需要的内存大小(字节数),并在返回后强制转换为实际类型的指针
例如

new

int *p;
p=new int;//返回类型为int *类型,分配大小为sizeof(int)
或
p=new int[100];//分配大小为sizeof(int)*100

malloc

int *p;
p=(int *)malloc(100*sizeof(int));//强制类型转换为int *,分配大小100*sizeof(int)

2.malloc只管分配内存,不能对所分配的内存进行初始化,所以其值是随机的


3.销毁方式不同,new对应delete,malloc对应free

malloc例子
#include<stdio.h>
#include<malloc.h>

int main()
{
char *p;
p=(char *)malloc(sizeof(char)*100);
if(p)
    printf("Memory Allocated at: %x",p);
else
    printf("Not Enough Memory!/n");
free(p);
p=NULL;//主要NULL要大写
return 0;
}

五、free(配对malloc)

free(void *p)

1.free与malloc配对使用,几次malloc就有几次free

2.free释放的是指针指向的内存(注意:释放的是内存,不是指针)指针(是变量)还是指向原来的内存空间,只有程序结束时,指针才会被销毁

3.free释放内存后,最好指针指向NULL(即p=NULL),否则称之为迷途指针,防止又被解引用

野指针&迷途指针

指针未被分配空间时叫野指针。释放完空间没有赋为NULL称为迷途指针,两种情况都需要避免,以防止误操作,例如p在free后为赋为NULL前依然指向之前所分配的空间的地址,但此时操作该指针出错率会加大,因为系统在free该段内存空间后会在该段内存空间存储其他内容,所以会导致出错。所以要p=NULL;养成良好习惯!!!!!


六、数据结构基本概念和术语

1.数据

指所有能输入到计算机中并被计算机程序处理的符号的总称

2.数据元素&数据项

数据元素是数据的基本单位(作为一个整体来处理),一个数据元素可由若干个数据项组成。例如数据库中每条记录有姓名、年龄、性别,那么整体数据包括这三张统称为数据元素,而每一项称为数据项

3.数据结构

带结构的数据元素的集合(含线性结构、树形结构、图状结构或网状结构,集合结构)

假设用三个4位的十进制数表示一个含12位数的十进制数,例如以下:

321465879345,该数假如直接存储是存储不了的,需要拆开—a1(3241),a2(6587),a3(9345)
数据元素存在这次序关系< a1,a2>,< a2,a3>(必须按照这样的次序)
即a1,a2,a3顺序
< a1,a2>,< a2,a3>
a1,a2,a3

a4,a5,a6 二维顺序

行次序row={< a1,a2>,< a2,a3>,< a4,a5>,< a5,a6>}

列次序col={< a1,a4>,< a2,a5>,< a3.a6>}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值