什么是内存的动态分配?
全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈(stack)的区域。
C语言还允许建立内存动态分配区域,以存放一些临时用的数据,需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆(heap)区。只能通过指针来引用。
int *pt;
pt=(int *)malloc(100); //malloc(100)是void *型,把它转换为int *型
注意:不要把“指向void类型”理解为能指向“任何的类型”的数据,而应理解为“指向空类型”或“不指向确定的类型”的数据。<\font>
sizeof:
是一个运算符,给出某个类型或变量在内存中所占据的字节数
#include <stdio.h>
int main()
{
int a;
a=6;
printf("sizeof=%d",sizeof(double));
printf("\nsizeof=%d",sizeof(a));
}
#include <stdio.h>
#include <stdlib.h> //程序中用了molloc函数,应包含stdib.h
int main()
{
void check(int *);//函数声明
int *p1,i; //p1是int型指针,只保存地址和类型
p1=(int *)malloc(5*sizeof(int));//开辟动态内存区,将地址转换成int*型,然后放在p1中
//p1得到了int*型地址
for(i=0;i<5;i++)
scanf("%d",p1+i);//输入5个学生的成绩
check(p1);
return 0;
}
void check(int *p) //定义check函数,形参是int*指针
{
int i;
printf("They are fail:");
for(i=0;i<5;i++)
if(p[i]<60) printf("%d ",p[i]);//输出不合格的成绩
printf("\n");
}