《C Primer Plus》 学习笔记系列之(三)
第12章 存储类、链接和内存管理:
具有代码块作用域的静态变量:
static int stay = 1;
extern:
#include<stdio.h>
int Errupt;
double up[100];
extern char coal; //coal在其他文件中定义,coal的真正意义是在程序中其他某个地方,也许是在另一个文件中。
void next();
int main()
{
extern int Errupt; //和在头文件中定义的Errupt是同一个变量,引用声明。
extern double up[];
Errupt = 32;
next();
return 0;
}
void next()
{
printf("%d", Errupt); //输出32
}
第一次声明为定义声明,为变量留出了存储空间;第二次声明只是告诉编译器要使用先前定义的变量Errupt,引用声明。
c语言中有5个作为存储类说明符的关键字,分别是auto、register、static、extern、typedef。
分配内存:malloc()和free():
malloc(), 分配内存函数,接受一个字节参数:所需内存字节数。然后它可以返回那块内存的第一个字节的地址。malloc()可以返回数组指针、结构指针。
double * ptd;
ptd = (double *)malloc(30 * sizeof(double));
这段代码请求30个double类型值的空间,并把ptd指向该空间所在位置。
一般,对应每个malloc()调用,应该调用一次free()释放内存以供再次使用。
使用calloc()函数来进行内存分配。
long * newmen;
newmen = (long *)calloc(100, sizeof(long));
第一个参数是所需要的内存单元的数量,第二个参数是每个单元以字节记的大小。
const:
const int nochange = 1;
const int days1[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
将变量定义为只读变量。
指针使用const则要复杂一些,因为不得不把让指针本身成为const与让指针指向的值成为const区分开来。
const float * pf; //pf指向一个常量浮点数值,pf本身的值可以改变,等同于float const * pf;
float * const pt; //pt是一个常量指针,pt本身的值不可以改变
const float * const ptr; //ptr本身和ptr所指向的值都不能改变
定义函数时,如果是显示一个数组的内容,不允许函数改变数组值,可以定义为:
void display(const int array[], int limit);
char * strcat(char *, const char *); //定义的第二个字符串参数不允许改变。
还没有评论,来说两句吧...