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

被折叠的 条评论
为什么被折叠?



