c语言给指针分配内存
❶ 什么叫做malloc函数
malloc函数是c语言中的一个内存分配函数,用于动态地分配内存空间。malloc函数返回一个指向所分配内存空间的指针,可以通过这个指针来访问和操作所分配的内存空间。如果内存分配失败,则返回NULL。
malloc函数的语法:void* malloc(size_t size);
其中,size_t是unsigned long或unsigned int类型,表示要分配的内存空间的大小,单位是字节。malloc函数返回一个指向所分配内存空间的指针,如果内存分配失败,则返回NULL。
malloc函数的使用方法如下:
在这个示例程序中,我们首先使用malloc函数分配了一个int类型的内存空间,并将这个内存空间的指针赋值给指针变量p。然后,我们检查内存分配是否成功,如果内存分配失败,则输出错误信息并返回0。如果内存分配成功,则给所分配的内存空间赋值,并输出p的值。最后,我们使用free函数释放了所分配的内存空间。
♡♡ 有帮助到的话,麻烦采纳哦!♡♡
❷ c语言:为结构体指针的指针开辟空间
struct stu
{
int a[]; //!!
}; //--丢失逗号
int main()
{
int i=0,j=0;
struct stu *p;
// p=malloc(10*sizeof(p)); //为p开辟空间,成功
p= (stu*)malloc(10*sizeof(stu));//分配后的空间需要强转为stu* 才可以赋值给P类型一样。
if(p==NULL){ //检查申请是否成功
return false;
}
//p->a=malloc(10*sizeof(int)); //不知道成功没----对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍。(参考下struct和union的内存对齐方式)
//所以不必再为结构体内部申请空间。 另外int *a, 申请多大的空间也没用啊 就一个int型 所以结构体里面定义为int a[]或者定义结构体数组。
for(i=0;i<10;i++){
for(j=0;j<10;j++){
scanf("%d",p->a+j); // error C2059: syntax error : '('----info 不知道你是怎么定义的,scanf("%d",p->a+j);
}
}
return 0;
}
❸ C语言中,定义一个指针的时候为这个指针开辟存储空间吗
Int*p:第一级指针,表示p点所在地址是一个100Int类型的值,p被声明为一个指向整数的指针,并且为这个指针分配了存储空间。但在这种情况下,它是一个随机数,我们称之为指向一个不确定的内存地址。
当用户说“direct*p=5”时,在一个不可预知的内存地址上写入一个整数5。这是不允许的,并可能导致程序崩溃。
P = & a;然后,将现有变量a的地址写入指针p,我们说指向a的指针可以通过变量p对变量a进行正常操作。
(3)c语言给指针分配内存扩展阅读:
指针:
指针的表示法是地址,核心是指向关系的指针,操作符“*”的作用是根据关系访问所指向的对象。如果版本与B有指向关系,则A为B的地址,“*A”表示通过该指向关系间接访问B。
如果B的值是一个指针,它指向C,BC地址,间接访问,CB“*”如果C是整数,真实的,或结构,如类型变量或数组元素对于这些类型的数据,BC(即地址)是通用的指针,即主要指的是右边的针,持有一级指针变量指针变量。
❹ C语言动态内存函数分配问题
你的问题是刚刚学习指针的人都有的问题,需要从地址来认识这个问题,C语言的数据都是需要申请空间来存放的,有静态和动态两种,动态分配的空间大小可以按需要分配,并且可以回收,静态是不可以回收的。
首先,分配动态的空间,指针P和空间的首地址是没有直接的联系的,只是为了手续要使用这个刚刚分配的空间才让P指针指向这个刚刚分配的空间的首地址的话,如果还不理解,你可以反向想想如果你分配的这个空间,而不用P指针指向这个首地址,那么你如何使用这个空间呢?
void型是针对地址型的直接分配,为什么不是分配char的空间呢?因为C语言和硬件关系密切,
有写硬件他的地址不是8位存储的,是16位,或者是32位的,那么这个void就忽略了这个硬件地址宽位就分配100个地址就是了,然后,强制转换成char的8位,如果硬件是16位了,那么,每个地址就会多分配了8位,而使用前8为来存储空间了。
返回的指针是分配的100个地址的首地址,不是这个指针P,举个例子吧,空间可以看做是一个队伍,他本身就有一个领头的人,那么P就是一个单独的人,那么,我们如果像要找到这个队伍,需要先找到队伍的领头人,领头的人只在你申请的时候出现一次,后面,你就找不到他了,怎么办?你把他电话给P吧,P可以找到他。呵呵。
如果还是不理解,那就不要理解了,建议去吧队列的方式,用指针和动态分配内存的方式实现一次,就知道了,不能照着书本抄,全部代码要自己写出来,就肯定理解了。