#include <stdio.h> void func1(void); void func2(void); void func3(void); void func4(void); int main(int argc, char ** argv){ func4(); getchar(); return 0; } /** malloc跟 calloc之间的区别 */ void func4(void){ char *p1 = NULL; p1 = malloc(sizeof(char)* 10); p1[0] = 'a'; printf(p1); printf(" "); free(p1); //屯屯屯屯屯��葺j凹碶 。某一次的运行结果。可见如果不赋初值的话,就一定有值。 p1 = calloc(10,sizeof(char)); p1[0] = 'a'; printf(p1); free(p1); //这样就可以看到运行效果了。因为帮助过我们进行初始化,所以后面p1里面的每个值都是0 //遇到0就是 文件结尾。所以 不再往下执行了 //func4的运行效果图:
} /** 写一个这么大的数,就是为了提醒自己,一定要记得free掉。 */ void func3(void){ int *p = malloc(sizeof(int)* 1000000);//我们说了这是一个int型数组 *p = 200;//给*p赋值,就是只给数组中的第一个元素赋了值。剩下999999个还没赋值呢,但是不代表里面没值 //任何一块儿从内存里面要出来的空间,都有值,有可能是0,当然如果是其他程序退出剩下的,那么就什么都有可能了。 //但通常都不是0。 //所以用 calloc申请的内容帮我们默认设置了初值0. printf("p的地址%p,p的大小%d", p, *p); free(p); // 运行结果:p的地址004D0040,p的大小200 } /** malloc(sizeof(int)*10) 跟 malloc(sizeof(char)*10) 分别代表什么怎么使用 */ void func2(void){ int * p = malloc(sizeof(int)* 10);//申请一个整型数组长度为10 sizeof() = 40 p[0] = 1; p[1] = 2; p[2] = 3; for (int i = 0; i < 3; i++){ printf("%d", p[i]); } free(p); } /** 引入malloc */ void func1(void){ char * p = malloc(sizeof(char)* 10);//申请一个char型数组,长度为10 zizeof() = 10 strcpy(p, "nihao"); printf(p); free(p); }