malloc(sizeof)是什么意思,C语言p1=(int )malloc(sizeof(int))作用与意思是什么
malloc(sizeof)是什么意思,C语言p1=(int )malloc(sizeof(int))作用与意思是什么详细介绍
本文目录一览: C语言中,(Node )malloc(sizeof(Node))是什么意思?
sizeof
是c语言的关键字,是运算符之一,用开求表达式,数据类型的在内存中所占的字节数目
strlen()是函数,是求字符串长度的函数
至于为什么这样强制转换,是因为malloc()返回的事void指针,必须强制指向你需要的类型
C语言及数据结构(C语言版)中,(Node
*)malloc(sizeof(Node))是用来申请动态存储空间的。
例如:
a=(Node
*)malloc(sizeof(Node))就在内存中给a分配了一个动态的存储空间。用完自动释放掉。
因为malloc返回的指针是void型的,需要前面加(Node
*)显式转换为指向Node的指针。
sizeof是取一个结构体的大小
整句的意思就是给指向Node的指针分配了一块空间。
sizeof()是得出类型占用的字节空间,如sizeof(int),代表int类型在当前编译器下占用多少个字节。
strlen()是得出字符串长度的,如strlen("test")返回4
(Node
*)malloc(sizeof(Node))是指在malloc成功后返回一个Node类型的指针
C语言p1=(int )malloc(sizeof(int))作用与意思是什么
malloc是向系统申请内存空间的函数,返回值是void
*
很明显,p1一定是定义为int
*p1;的,所以强制malloc返回的指针更改类型为int
*
malloc的参数说明要申请多少字节数据,这里要申请一个连续5个整型的数据区,所以用5乘以每个int占用的字节数,即5*sizeof(int)
申请一个大小为 一个int所占值大小 的内存空间,并返回地址,且把地址强制转换成 int* 类型的,然后再把转换过的地址值赋给指针变量p1.
sizeof(int)是算整形int的长度, 用malloc()函数分配一个int型变量长度的存储空间,
(int *)是转换成int型的指针类型
分一块内存给p1,sizeof(int)即分配的大小为INT的大小,为4
free(p1);//释放p1的内存
用malloc()函数分配一个int型变量长度的存储空间,并将地址返回给p1指针
malloc()前面的(int *)是为了将malloc()返回的(void *)类型的指针转换为int *类型
p1=(int *)malloc(sizeof(int));语句是给指针变量p分配一个整形数据空间。
C语言中定义指针变量后,必须给指针变量进行相应的地址分配,才可以使用指针变量,否则会出现程序异常。常见的指针地址分配方法为:
int *p1; //定义指针变量p1,未初始化
(1)
int x =5;
p1=&x ; //给指针变量分配一个已存在的相应类型的变量的地址,即p1指向x所在的位置。
(2)
p1=(int *)malloc(sizeof(int)); //让系统为p1选择一个内存空间
其中,malloc()是系统动态分配内存的函数,其函数原型为:
void * malloc( int size );
void *表示函数返回值为任意类型,即malloc可为任意类型数据分配内存空间
参数size是指分配的内存单元字节数
接下来就可以通过指针变量p1进行数据操作了,如:*p1 = 10 ;
注意,当p1未分配内存地址时(称为野指针),*p1操作会导致程序崩溃。
C语言中L=(SqList )malloc(sizeof(SqList));是什么意思?
从总体的来说,这句是给指针分配空间。
赋值号左边L是一个SqList
*指针,指向名为SqList的结构体;赋值号右边,malloc(sizeof(SqList))是分配一块大小为sizeof(SqList)的内存,并返回首地址并赋值给左边的L指针,(SqList
*)表示把这个地址强制转化为SqlList
*的指针。
L是一个指针,指向SqList这样一个结构这个语句是一个赋值语句,malloc(sizeof(SqList))是分配一块大小为sizeof(SqList)的内存,并返回首地址,(SqList
*)表示把这个指针转型为SqlList结构的指针
这个语句是一个赋值语句,malloc(sizeof(sqlist))是分配一块大小为sizeof(sqlist)的内存,并返回首地址,(sqlist
*)表示把这个指针转型为sqllist结构的指针
L是一个指针,指向SqList这样一个结构这个语句是一个赋值语句,malloc(sizeof(SqList))是分配一块大小为sizeof(SqList)的内存,并返回首地址,(SqList
*)表示把这个指针转型为SqlList结构的指针
C语言中,p=(ListNode)malloc(sizeof(ListNode))具体什么意思,
像操作系统申请一块内存,大小为ListNode,类型为ListNode *的空间给p指针变量,望采纳
malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以通过类型转换强制转换为任何其它类型的指针。--摘自百度百科 malloc函数
sizeof(ListNode)计算ListNode所需要分配的空间大小
(ListNode*)malloc(...) 将返回的指针(void*)强制转换成ListNode*
希望我讲的够清楚。
更多参考百度百科malloc函数。
p = (LinkList)malloc(sizeof(node)); 能帮我详细解释下是什么意思么?
extern
void
*malloc(unsigned
int
num_bytes);
头文件:在TC2.0中可以用malloc.h或
alloc.h
(注意:alloc.h
与
malloc.h
的内容是完全一致的),而在Visual
C++6.0中可以用malloc.h或者stdlib.h。
功能:分配长度为num_bytes字节的内存块
返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
说明:关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
名称解释:malloc的全称是memory
allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
以上摘自百度百科http://baike.baidu.com/view/1213621.htm
我解释一下,malloc就是在堆里申请空间,后面的sizeof(node)就是申请空间的大小
一般为Type*
p2Type
=
(Type)malloc(sizeof(node));
返回一个void*.
malloc(sizeof(node))是申请node变量对应大小的内存,返回的是无类型地址,(LinkList)是要将其强制转换成LinkList类型
p1=(int )malloc(sizeof(int));什么意思
malloc返回的是void *型指针,也就是无类型指针,需要通过强制转换赋值给其他类型的指针.
(int*)表示强制转换为指向int类型的指针,因为malloc()返回的是void*,这个是不带类型的指针
(int *)表示,程序把malloc的返回值强制转换成整型的类型。
malloc返回的是void *型指针,需要通过强制转换赋值给其他类型的指针
sizeof(int)
相当于2,malloc(sizeof(int))就相当于申请2个字节的动态存储空间,(int
*)malloc(sizeof(int))返回的类型是强制转换为int型的指针。
p=(LinkList)malloc(sizeof(LNode))能不能仔细的给我解释一下是什么意
就是为P申请内存的意思啊!你应该知道
int *a=new int[10]这种用法吧!
p=(LinkList)malloc(sizeof(LNode))这个语句其实和上面的那个语句效果都一样!这个应该是链表吧!就是创建一个结点!
也可以这样写
p=new LNode[sizeof(LNode)];效果都是一样的
p是指针变量
LinkList是将后面的强制转换成指针类型
malloc()是向内存申请指定字节的内存空间
sizeof()是测试数据类型的长度
LNode是应该是一个结构体
(LinkList)malloc(sizeof(LNode))表示开辟一个LNode长度的内存空间,并强制转换成指针类型
这个就是申请sizeof(LNode)大小的内存,然后用一个指针指向这块内存的头部,你可以看一下LNode的结构,LNode的最开始应该就是一个LinkList结构,这样就可以用p这个指针还操作这一块内存而不用管LinkList之后的数据是什么
p=(LinkList)malloc(sizeof(LNode))
这个通常是开辟一个新的地址空间时用的,LinkList是指针的类型,就和int *p一样,此时p指向存放LinkList类型变量的地址空间,malloc是函数,参数为要开辟空间的大小,sizeof是求Lnode的大小,总的就是说开辟一个Lnode大小的新的空间,p指向该空间
LinkList s=(LinkList)malloc(sizeof(LinkList));是什么意思呀,把它翻译成C++的通俗语言,好吗?
LinkList
是个自定义的结构体。
LinkList*
s
是定义了一个结构指针,跟定义整数指针int
*P一样。用来指向结构体变量的。
后边的malloc()是c语言中的动态分配内存的函数。给的参数是几,它就分配出一个几字节的连续空间出来。sizeof()是求一个类型的字节大小的,比如
sizeof(int
)就是4即,存一个整数要用4个字节空间。
同样这里求的是LinkList的存储空间。。
malloc()返回这个连续空间的首地址,然后在前边的括号里是一个强制类型转换的
,把这个首地址转换为
结构体的指针。这样就可以赋值给同样是结构体指针变量的
s了。于是用
s就能引用到这块存储区域,如s->date=10;s->next=NULL等等。
如果不会用结构体,可以找找资料。这里就相当于内存分配。然后给分配的内存命个名好引用它。跟c++中的new操作一样,new是针对对象的操作,而这里则是针对结构体操作。
LinkList
:用户自己定义的链表,是一个结构体,比如
typedef
struct
_LinkList
{
int
id;
//
学号
char
name[16];
//
姓名
struct
_LinkList
*
next;
//
指向下一个节点
}
LinkList
;
malloc(size)
:
一个C语言库函数,
用来申请一块动态内存,
参数size是要申请的内存的大小,
返回所申请的内存的地址,该地址是一个void
*指针。
该函数可以用C++的new来代替
sizeof(DataType)
:获取某数据类型在内存中所占的字节
所以
malloc(
sizeof(LinkList)
)
就是申请一块大小为sizeof(LinkList)的内存,由于返回的是一个void
*指针类型的地址,我们不知道该地址存放的是什么内容,不能访问它。所以需要在前面加(LinkList*)把它转换成LinkList类型的指针,这样程序就知道它存放的是什么内容了,就可以正确访问了。
总的来说,
LinkList
*s=(LinkList*)malloc(sizeof(LinkList));
就是申请一个LinkList
*类型的数据s就跟你申请一个整形int
n
类似,换成动态申请可以这样
int
*
n
=
(int
*)malloc(sizeof(int));
n就是一个指向整形的指针了
另外,可以把malloc()换成C++里的new
:LinkList
*s
=
new
LinkList();
如果一次要创建多个n个LinkList
c语言版的可以这样:LinkList
*s
=
(LinkList*)malloc(sizeof(LinkList)
*
n);
C++版的可以这样:LinkList
*s
=
new
LinkList[
n
];
that's
all
!!!
q=(lqueue)malloc(sizeof(lqueue)); 什么意思
分配一个lqueue对象大小的空间,并将地址强制转换成lqueue的指针赋值给p指针
申请一个sizeof(lqueue)大小的空间。用(lqueue*)类型的指针p,指向这个空间。
申请一个sizeof(lqueue)大小的空间。用p指向这个空间。
分配空间
(lqueue*)是一个类型名,
malloc是内存分配函数,返回一个void*类型的指针(linux可以自动转化为申请者的指针类型)
所以这个语句的意思是申请一块内存,大小为sizeof(lqueue),因为返回类型为void*,所以进行强制类型转化。