C程序内存分配图
栈区:局部变量
堆区:动态分配的数据
静态存储区/全局区:全局变量,静态数据
代码区:代码,指令
内存分配说明
内存动态分配的相关函数
堆区:
#inlcude<stdlib.h>
Malloc(size);//分配长度为size个字节的连续空间
Calloc(n,size);//分配size个长度为n个字节的连续空间,总共有size*n个字节
Free§;//销毁指针p所指向的堆空间,其他函数和主函数不能再使用
Realloc(p,size);//重新分配指针p所指向的内存空间大小,指针所指向的地址不变,仅仅是空间扩大或缩小
Void*:
Void*:仅仅是一个纯地址,而不指向任何的对象:
Void* p;//无类型指针变量
如果是void类型,不能够用p来取得值(报错)
void*强制类型转换举例:
代码
#include<stdio.h>
//动态内存分配(堆区)--void*无类型指针
int main()
{
int a=102;
int *pa=&a;
//类型转换1
char b='c';
char *pb=&b;
void *p;
char *pc;
char *pd;
p=(void*)pb;//强制类型转换,char*pb-->void*,并把pb地址赋值给p
pc=(char*)p;//强制类型转换,void*p-->char*
pd=(char*)pa;
//记住:没有*p,p只是一个地址,不指向任何对象
printf("类型转换1:\n");
printf("pb=%c address=%p self-address=%p\n",*pb,pb,&pb);
printf("p:address=%p self-address=%p\n"