int 32位
short int 16位
long int 简称 int 32位
char 8位
unsigned char 无符号字符 0—255
unsigned short int 0-65536 16位
unsigned int 4字节
整数的输出格式:
%d 十进制整数
%i 十进制整数
%u 无符号十进制整数
%x 十六进制(a--f)
%X 十六进制(A--F)
%o 八进制
float %f输出 4字节
double 8字节
优先级:算术优先、关系其次、逻辑最后
/000 表示8进制数, 相当于 0ooo , ’/123’=0123
/xhh 表示16进制数,相当于0xhh , ‘/x4a’=0x4a
# :(格式化字符串中用)printf(“%#X”,x);表示x以十六进制输出,前带0X
Used with o, x or X specifiers the value is preceeded with 0, 0x or 0X respectively for values different than zero.
Used with e, E and f, it forces the written output to contain a decimal point even if no digits would follow. By default, if no digits follow, no decimal point is written.
Used with g or G the result is the same as with e or E but trailing zeros are not removed.
<< 、>>移位符号,<<低位补零。>>最高位补充符号位。
函数指针 :所谓函数的指针,就是可以指向函数的指针。它的内容就是函数在内存里的地址。在计算机里,可以执行的函数程序代码必须放在内存的某个区域才能执行,此区域的起始地址就是该函数的地址。
函数名代表该函数的入口地址。
指向函数的指针:
数据类型 (*指针变量名)(函数参数列表);
1。在给函数指针变量赋值时,只需给出函数名而不必给出参数
2. 用函数指针变量调用函数时,只需将(*p)代替函数名即可,在(*p)之后的括号中根据需要写上实参。
3.用函数指针变量调用函数时,可以用(*p)(参数表),也可以用p(参数表)。两者等价。
malloc()和free()
*(p+n) = p[n];
calloc与malloc用途相同,能在程序执行时,视数据量的多少随时申请足够的空间。
指针 =calloc(n,size);n个数据项,每个size大小。
realloc()能扩大或缩小已取得的区域。指针=realloc(原先的指针,现需空间的大小);注意,计算机可能会找另一块足够大的空间来取代原来分配的空间。因此,新返回的指针值可能与原先的指针值不同。
私有变量的使用限于函数内部,统称为“内部”(Internal或Local)变量。公共变量则可以让各个函数共享,统称为“外部”(External或Global)变量。根据使用权限,变量可以分为三个类:
自动变量(auto)隶属于一个函数,别的函数无权使用。自动变量是内部变量,必须声明与函数之内。函数中的局部变量,如果不专门声明为static类型,都是动态的分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量,都属于此类。
外部变量(external)程序(常由数个源代码文件所组成)由各函数公用
外部静态变量(External Static)一个源代码文件,该文件内的各函数公用,但其他文件内的函数无权使用。有时在程序设计中希望某些外部变量只限于被本文引用,而不能被其他文件引用。这时在定义外部变量时加一个static。
静态局部变量(static)有时希望函数中的局部变量在函数调用结束后部消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。
static 关键字的使用规则:
若想延长内部变量的生命期,就在内部变量前加上static
若想把外部变量的有效范围局限于所属的原始文件内,就在外部变量前加上static
内部函数:
不让其他文件共享的函数称为“静态函数”(static function) static 类型 函数名称(参数表);
外部函数:
在定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。
C语言规定,如果在定义函数时省略extern,则隐含为外部函数。在需要调用此函数的文件中,用extern对函数进行声明,表示该函数是在其他文件中定义的外部函数。
2维数组与指针
p[i]=*(p+i)
p[i][j] = *(p[i]+j) = *(*(p+i)+j)
数组的赋值:int a[3] = {0,1,2};
int a[2][3]={{0,1,2},{3,4,5}};
宏:#define 别名 常数或符号
“”内的符号不会被解释为宏,所以不会被替换。
typedef 用来替换某一变量类型取一个新的名称,他是一般的指令,而不是宏定义。
带参数的宏:1.参数被包含于宏名称后的小括号内,但是宏名称与小括号要紧密连接在一起。
2.跨行的宏:使用“反斜线+ENTER”可将宏定义切分为数行。
3.##的使用。举例:#define FUNC(type) /
type * type##_function() /
{
如果写成 FUNC(int)
预处理后,为 int * int_function(){
type##表明了此type是参数,所以会被取代。
4.取消宏:#undef可以取消由#define所定义的宏。#undefine的意思是在此后的该宏不再是宏了,请勿替换。#define –#undefine 说明了该宏的有效范围。
条件性定义:
#ifdef 宏 若已定义了此宏,就留下#ifdef与#endif间的指令
#ifndef 宏 若未定义了此宏,就留下#ifdef与#endif间的指令
#endif 说明#ifdef 及#ifndef的范围
#unfef 宏 解除定义
#else 可构成#ifdef –#else -- #endif 结构或#ifndef –#else -- #endif