图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
在C程序设计时,如果要使用变量或数组必须先进行定义,然后才可以使用。当程序中定义变量或数组以后,系统就会给变量或数组按照其数据类型及大小来分配相应的内存单元,这种内存分配方式称为静态内存分配。也就是说,这些内存在程序运行前就分配好了,不可改变。例如:
int k;//系统将给变量k分配4个字节的内存单元
char ch[10];//系统为数组ch分配10个字节的内存块,首地址就是ch的值
C程序设计中,所谓“动态数据”指的是不需要事先定义使用的数据对象,而是在程序运行过程中按照实际需要向系统提出存储分配要求,然后通过指针运算方式使用从系统中分配到的存储空间。
为了能够在C程序中使用动态数据,就必须解决动态分配内存的问题。C标准库中提供了一系列用于存储分配的函数,存储分配函数的原型在头文件stdlib.h和alloc.h中均有声明,使用动态存储分配的应用程序中需要包含两个头文件之一。在与存储分配相关的函数族中,malloc和free是最常用的两个函数。
1.存储分配函数malloc
原型:void*malloc(size_t size);
功能:在主存储器中的动态存储区分配由size所指定大小的存储块,返回所分配存储块在存储器中起始位置(指针)。返回指针类型为void(空类型),在应用程序中应根据需要进行相应的类型转换。如果存储器中没有足够的空间分配,即存储分配失败时返回NULL。(www.chuimin.cn)
2.存储释放函数free
原型:void free(void*memblock);
功能:释放由指针变量memblock指明首地址的、通过malloc类库函数分配获取的存储块,即将该块归还操作系统。
需要注意的是,使用free函数只能释放由malloc类函数动态分配的存储块,不能用free函数试图去释放显式定义的存储块(如数组等)。
【例8.17】 malloc函数和free函数使用示例。
在例8.17的程序中,通过存储分配标准库函数malloc分别按照所要求的长度分配存储空间,并将它们的起始地址转换为相应数据类型的指针赋值给对应的指针变量。然后将指针变量和对它们的指针运算分别作为数据的地址和数据本身进行操作。
在使用动态存储分配的程序设计中,特别要注意释放的问题。例8.17程序中去掉后面3行free函数的调用似乎也不会出现问题,这是由于程序运行完成后其占用的所有存储区域都会归还系统。在运行时间周期长或者动态存储分配操作频繁的程序设计中,特别要注意free函数的使用。对于动态分配的存储块使用完成后应尽快释放,否则有可能造成“内存泄漏”。
有关C语言程序设计基础(第3版)的文章
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
图8.1函数内存映射方式1.指向函数指针变量的定义C语言中可以定义指针变量来存储函数的首地址,并利用该指针变量对函数进行调用。指向函数的指针变量的真正作用是作为函数参数使用,使程序在功能的实现上具有更大的灵活性。指向函数的指针变量求最大值、最小值和两数之和。......
2023-11-20
书写在特定函数内部时,用于向该函数声明被调用函数的特征,此时仅有书写了函数声明语句的函数知道被声明函数的存在。当被调函数与主调函数位于同一源文件,且被调函数的定义出现在主调函数之前时,不必对被调函数进行声明,其原因是编译系统此时已经知道了被调函数的所有特征。对被调函数不必进行声明的示例。......
2023-11-20
在C语言中,以函数首部声明函数的形式称为函数原型。使用函数原型是C语言的一个重要特征,主要作用是利用它在程序的编译阶段对调用函数的合法性进行全面检查。......
2023-11-18
在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2023-10-21
算法是对操作或行为的描述。算法代表着用系统的方法描述解决问题的策略。不同的算法可能用不同的时间、空间或效率来完成同样的任务。那么怎样衡量一个算法的正确性呢?算法包含的操作步骤应该是确定的,不允许有歧义。算法的实现是以得到计算结果为目的的,没有任何输出的算法没有任何意义。......
2023-11-20
A.与参数x的类型相同B.无法确定C.void类型D.int类型3.为了避免嵌套的条件语句if-else的二义性,C语言规定()。A.else与缩排位置相同的if配对B.else与同一行上的if配对C.else与其之后最近的if配对D.else与其之前最近的尚未配对的if配对4.设x、y、z和k都是int型变量,则执行表达式:x=后,x的值为()。A.7 B.6 C.5 D.47.在C语言程序中,用关键字()定义无符号型变量。else语句实现两个分支。......
2023-09-19
相关推荐