首页系统综合问题一起学《C程序设计》第九课-预处理和动态分配内存

一起学《C程序设计》第九课-预处理和动态分配内存

时间2023-03-28 22:16:00发布分享专员分类系统综合问题浏览102

今天小编给各位分享c盘分小了怎么重新分配的知识,文中也会对其通过一起学《C程序设计》第九课-预处理和动态分配内存和C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 一起学《C程序设计》第九课-预处理和动态分配内存
  • C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)
  • 学习C语言需要掌握哪些基本知识?
  • 东南大学-《C++语言程序设计》(全80讲)每一讲的视频目录
  • 一、一起学《C程序设计》第九课-预处理和动态分配内存

    这节课作为前几课的补充扩展,来让初学者了解更多的C语言的特性。 一个是C语言的预处理(预编译)命令,一个是动态分配内存,补充上节课的指针。

    预处理命令

    C程序在编译的阶段,一般预先处理一些事情,称之为预处理或者预编译阶段。这个时候只对源码做一些转换处理,并不涉及内存分配,和编译阶段做的事情完全没有关联。合理的使用预处理命令能使程序更加灵活可控,还具备很好的可移植性。

    C语言预处理

    宏定义

    一般在文件的开头使用宏定义,定义常量也属于宏定义。宏定义标识符只做编译前的源文件字符替换,不参与编译过程。

    普通宏定义如常量:#define STRING value可以进行表达式代替值,比如先定义#define A 1之后可以再定义#define B A+1带参数的宏定义,#define ADD(x,y) x+y,源文件可以ADD(1,2)这样调用

    条件编译

    顾名思义,条件编译指源文件中的代码有条件的参与编译,不满足条件不会参与编译,这与C语言中的if语句有类似的作用,但是有明显的区别:if语句不管满不满足条件都参与编译,在程序执行过程中去判断执行;条件编译则在预编译阶段把不满足条件的代码剔除掉,减少了编译的语句,也就没有了在程序执行过程中的判断逻辑。

    #ifdef STRING...#else...#endif,其中else可以省略,如果定义了STRING则执行#ifndef STRING...#else...#endif,与上面相反,如果没有定义STRING则执行

    文件包含

    C语言用include来包含文件,即将另一个文件合并到当前文件中,include两种用法:

    #include <file>,一般包含的是系统的库函数头文件#include "file",一般包含用户自定义的文件

    预编译时,遇到尖括号优先去系统目录查找,遇到双引号优先去用户项目目录查找,所以根据引用的文件来决定使用尖括号还是双引号,可以节约查找时间,节约预编译的时间。

    动态分配内存

    void类型指针

    先说void类型的指针,这种特殊的指针类型不表示任何数据类型,在使用时根据需要做数据类型的转换,如:void *p; int *p2 = (int*) p;

    C语言void指针

    开辟动态内存

    使用malloc()函数来申请一段固定长度的内存空间,返回的是一个void指针,在使用的时候可以直接定义一个基础类型的指针,然后给其赋值,C语言在编译的时候会自动把void指针转换为你定义的指针类型,如:int *p = malloc(sizeof(int));

    使用calloc()函数来申请n个连续的固定长度的内存空间,定义好之后根据指针的移动,可以轻松传递一个数组进去。

    重新定义内存

    使用realloc()函数来为已经申请内存的指针变量重新分配内存空间。先看如下示例:

    realloc()函数示例

    上面代码中,由于对p2做了运算(p2++),所以在重新分配内存的时候要把p2的指针指向初始位置,即p2-3的位置。对于realloc()的使用总结一下几点:

    第一个指针参数必须指向已申请内存的首地址重新分配内存空间后,如果失败则返回NULLrealloc()第一个参数可以是NULL,这样使用相当于直接开辟新内存空间,和malloc()、calloc()功能一样realloc()可以“嵌套调用”,也就是已经被重新分配的空间还可以再次重新分配

    释放内存

    使用free()函数释放上面三个函数申请的内存空间,和realloc()一样,需要保证指针地址指向内存空间的初始值。

    总结

    预处理命令在第三版有章节介绍,而第五版删除了,但是我们要知道有这个东西,能读懂别人的代码,因为这种预处理命令在C语言中很常见。

    关于指针要多练习,使用时要小心,结合动态分配内存去理解并加以运用。有任何疑惑的地方,最好的方法还是借助于Visual Studio去验证自己的理解和想法,遇到搞不懂的地方多去网上搜寻资料,要有刨根问底的劲儿!

    往期文章

    一起学《C程序设计》第八课——指针

    一起学《C程序设计》第七课——函数及实战练习

    一起学《C程序设计》第六课——数组、字符串及实战练习

    一起学《C程序设计》第五课——循环控制及实战练习

    一起学《C程序设计》第四课——if语句、switch语句及实战练习

    一、C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)

    先举个例子:某用户需要一个将任意多个整数按大小排序的程序。(在计算机文件夹中,当文件很多时经常用到排序)
    1。若不用动态分配内存,那就定义一个超大的数组吧!问题是,如果用户不需要那么大,不就浪费了?如果定义的数组还不够大,不就不能满足需求了?
    2。如果用动态分配,就解决上述问题了。当你需要多大内存时,就给你多大——如果有的话——这就是动态分配的意义。

    现在看上述问题的代码,我调试过的:
    ----------------------------------------------------------------------
    #include
    #include
    void main()
    {
    int n,*p,i,j,m;
    printf("本程序可对任意个整数排序;\n");
    printf("请输入整数的总个数: ");
    scanf("%d",&n);
    p=(int *)calloc(n,sizeof(int));
    if(p==0) {
    printf("分配失败!\n");
    exit(1);
    }
    printf("请输入这些整数:\n");
    for(i=0;i

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    c盘分小了怎么重新分配
    电脑经常死机是因为什么?有什么解决方法? 手机免费坐标连点器免ROOT,实用工具箱