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

一时失言乱红尘 2022-08-10 15:37 248阅读 0赞

第12章 存储类、链接和内存管理:

具有代码块作用域的静态变量:
static int stay = 1;

extern:

  1. #include<stdio.h>
  2. int Errupt;
  3. double up[100];
  4. extern char coal; //coal在其他文件中定义,coal的真正意义是在程序中其他某个地方,也许是在另一个文件中。
  5. void next();
  6. int main()
  7. {
  8. extern int Errupt; //和在头文件中定义的Errupt是同一个变量,引用声明。
  9. extern double up[];
  10. Errupt = 32;
  11. next();
  12. return 0;
  13. }
  14. void next()
  15. {
  16. printf("%d", Errupt); //输出32
  17. }

第一次声明为定义声明,为变量留出了存储空间;第二次声明只是告诉编译器要使用先前定义的变量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 *); //定义的第二个字符串参数不允许改变。

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读