您的位置:首页 > 其它

《C Primer Plus》 学习笔记系列之(三)

2014-08-01 15:48 267 查看

第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 *); //定义的第二个字符串参数不允许改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: