书写在特定函数内部时,用于向该函数声明被调用函数的特征,此时仅有书写了函数声明语句的函数知道被声明函数的存在。当被调函数与主调函数位于同一源文件,且被调函数的定义出现在主调函数之前时,不必对被调函数进行声明,其原因是编译系统此时已经知道了被调函数的所有特征。对被调函数不必进行声明的示例。......
2025-09-30
在C程序设计时,如果要使用变量或数组必须先进行定义,然后才可以使用。当程序中定义变量或数组以后,系统就会给变量或数组按照其数据类型及大小来分配相应的内存单元,这种内存分配方式称为静态内存分配。也就是说,这些内存在程序运行前就分配好了,不可改变。例如:
int k;//系统将给变量k分配4个字节的内存单元
char ch[10];//系统为数组ch分配10个字节的内存块,首地址就是ch的值
C程序设计中,所谓“动态数据”指的是不需要事先定义使用的数据对象,而是在程序运行过程中按照实际需要向系统提出存储分配要求,然后通过指针运算方式使用从系统中分配到的存储空间。
为了能够在C程序中使用动态数据,就必须解决动态分配内存的问题。C标准库中提供了一系列用于存储分配的函数,存储分配函数的原型在头文件stdlib.h和alloc.h中均有声明,使用动态存储分配的应用程序中需要包含两个头文件之一。在与存储分配相关的函数族中,malloc和free是最常用的两个函数。
1.存储分配函数malloc
原型:voidmalloc(size_t size);
功能:在主存储器中的动态存储区分配由size所指定大小的存储块,返回所分配存储块在存储器中起始位置(指针)。返回指针类型为void(空类型),在应用程序中应根据需要进行相应的类型转换。如果存储器中没有足够的空间分配,即存储分配失败时返回NULL。(https://www.chuimin.cn)
2.存储释放函数free
原型:void free(voidmemblock);
功能:释放由指针变量memblock指明首地址的、通过malloc类库函数分配获取的存储块,即将该块归还操作系统。
需要注意的是,使用free函数只能释放由malloc类函数动态分配的存储块,不能用free函数试图去释放显式定义的存储块(如数组等)。
【例8.17】 malloc函数和free函数使用示例。
在例8.17的程序中,通过存储分配标准库函数malloc分别按照所要求的长度分配存储空间,并将它们的起始地址转换为相应数据类型的指针赋值给对应的指针变量。然后将指针变量和对它们的指针运算分别作为数据的地址和数据本身进行操作。
在使用动态存储分配的程序设计中,特别要注意释放的问题。例8.17程序中去掉后面3行free函数的调用似乎也不会出现问题,这是由于程序运行完成后其占用的所有存储区域都会归还系统。在运行时间周期长或者动态存储分配操作频繁的程序设计中,特别要注意free函数的使用。对于动态分配的存储块使用完成后应尽快释放,否则有可能造成“内存泄漏”。
相关文章
书写在特定函数内部时,用于向该函数声明被调用函数的特征,此时仅有书写了函数声明语句的函数知道被声明函数的存在。当被调函数与主调函数位于同一源文件,且被调函数的定义出现在主调函数之前时,不必对被调函数进行声明,其原因是编译系统此时已经知道了被调函数的所有特征。对被调函数不必进行声明的示例。......
2025-09-30
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2025-09-30
在C语言中,以函数首部声明函数的形式称为函数原型。使用函数原型是C语言的一个重要特征,主要作用是利用它在程序的编译阶段对调用函数的合法性进行全面检查。......
2025-09-30
在C 语言程序中,是通过对函数的调用来执行函数体,其过程与子程序调用相似。在调用函数时,大多数情况下主调函数和被调函数之间有数据传递。图5.2程序运行结果函数调用在程序中起一个表达式或者语句的作用。在调用函数时,有3 种不同的方式。这就要求该函数必须是有返回值的。getchar 函数调用作为表达式使用,即赋值表达式的右操作。......
2025-09-30
图8.1函数内存映射方式1.指向函数指针变量的定义C语言中可以定义指针变量来存储函数的首地址,并利用该指针变量对函数进行调用。指向函数的指针变量的真正作用是作为函数参数使用,使程序在功能的实现上具有更大的灵活性。指向函数的指针变量求最大值、最小值和两数之和。......
2025-09-30
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2025-09-30
包括函数名的命名和类型说明、形式参数的类型说明、变量定义和语句。下面举例说明主函数和自定义函数。函数的定义是平行的,彼此相互独立,不能嵌套定义。函数的类型和函数返回值的类型应保持一致。以两个数求和为例,说明函数的定义。......
2025-09-30
C语言共有30多个关键字,9种控制语句,程序书写形式自由。同时C语言包含整型、实型、数组类型、枚举类型等数据类型,丰富的数据类型使得C语言可以表达各种复杂的数据结构,具有很强的数据处理能力。C程序由3种基本结构组成,分别是顺序结构、选择结构和循环结构,这三种结构组合可以完成任何复杂的任务。C语言的语法限制不太严格,程序设计和书写形式自由度大。C语言程序生成目标代码质量高,程序执行速度快。......
2025-09-30
相关推荐