Bjarne 在他的 The C++ Programming Language
里面给出过一个助记的方法:把一个声明从右向左读。
1 | char * const cp; ( * 读成 pointer to ) |
同上因为C++
里面没有const*
的运算符,所以const
只能属于前面的类型。
C++
标准规定,const
关键字放在类型或变量名之前等价的。
Bjarne 在他的 The C++ Programming Language
里面给出过一个助记的方法:把一个声明从右向左读。
1 | char * const cp; ( * 读成 pointer to ) |
同上因为C++
里面没有const*
的运算符,所以const
只能属于前面的类型。
C++
标准规定,const
关键字放在类型或变量名之前等价的。
执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
命令行参数是约定使用 main()
函数参数来处理的,其中,argc
是指传入参数的个数,argv[]
是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:
C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h>
头文件中找到。
*void calloc(int num, int size);
在内存中动态地分配 num
个长度为 size
的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size
个字节长度的内存空间,并且每个字节的值都是0。
*void free(void address);
该函数释放 address
所指向的内存块,释放的是动态分配的内存空间。
*void malloc(int num);
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
**void realloc(void address, int newsize);
该函数重新分配内存,把内存扩展到 newsize
。
注意:void *
类型表示未确定类型的指针。C、C++ 规定 void *
类型可以通过类型转换强制转换为任何其它类型的指针。
C 语言允许定义一个函数,能根据具体的需求接受可变数量的参数。
第一个参数都是表示被传的可变参数的总数,省略号被用来传递可变数量的参数。
1 | int func(int, ... ) |
函数 func()
最后一个参数写成省略号,即三个点号(...
),省略号之前的那个参数是 int
,代表了要传递的可变参数的总数。
C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX
函数调用返回 1 或 NULL
,同时会设置一个错误代码 errno
,该错误代码是全局变量,表示在函数调用期间发生了错误。
可以在 errno.h
头文件中找到各种各样的错误代码。
所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。
在程序初始化时,把 errno
设置为 0,0 值表示程序中没有错误。