课堂知识点
void无类型
void类型常用于定义函数返回值类型和函数的形参类型,如果函数不想要返回值可以直接return。
无类型(void)可以定义变量吗?
无类型是不能申请和定义空间的
注意:void是无类型,void*是万能指针类型,万能指针类型void *能定义变量也能赋值但是不能解引用,而void不能定义和申请内存空间
为什么可以void*类型的一级指针叫做万能指针类型呢?
void类型的指针变量可以存储任意类型的地址,而且可以通过强制类型转换将void*类型的指针转换成任意类型指针,事实上其它任意类型指针也可以转换成任意类型指针,只要能确保内存是足够的,意思就是必须要大于或等于你要强转的类型。
示例:
malloc函数:
(注意)堆空间和静态区(static)的生命周期比栈空间长,不会因为函数退出而被释放,我们平时申请的局部变量都储存在栈空间中,在函数执行完毕后就会释放内存。
mallco只有一个参数,只需要以字节为单位输入你需要申请的内存大小即可,
申请成功则会返回空间首地址,失败就返回NULL。
示例:

calloc函数:
calloch(a,b)与malloc功能差不多,但是calloc有两个参数,其中a是你要申请的内存块个数,b是你要申请的内存块大小。
示例:



(注意)memset(a,b,c)是用来清空内存的,a是要清空的内存首地址,b是要替换的数一般为0,c是替换个数
memcpy(a,b,c)是用来复制的,a是存放的首地址,b是复制内容首地址,c是复制的长度
free是用来释放申请的内存的
课堂练习
int main()
{
int * heap_start_p = (int *)malloc(sizeof(int));
if(heap_start_p == NULL)
{
printf("申请空间失败");
return -1;
}
*heap_start_p = 110;
printf("%d----------%p",*heap_start_p,heap_start_p);
free(heap_start_p);
return 0;
}

作业:
使用malloc申请20个字节的空间,然后再空间里面的第3个房间开始一次性存放Hello Dante!
#include <stdlib.h>
#include <string.h>
#define NUM 20
void funs(char * x);
void funs(char * x)
{
x = x + 2;
while( *x != '\0')
{
printf("%c",*x);
x++;
}
// for(int i=2; i<strlen(x+2)+2; i++)
// {
// printf("%c",*(x+i));
// }
}
int main()
{
//char * p = (char *)malloc(sizeof(char)*NUM);
// 20是元素个数 1是元素大小
char * p = (char *)calloc(20,1);
char mtext[] = "hello Dante!";
memset(p,0,sizeof(char)*NUM);
memcpy(p+2,mtext,strlen(mtext));
funs(p);
free(p);
// char * u = "sjfaldk";
// printf("%c",*u); --------- s
// char arr[]="dlaka----";
// printf("%s",arr);
return 0;
}

1838





