- 符号常量 # define PI 3.1416
- 常变量 const int a =3; 有类型,占存储单元,不可以改变值
- 变量在存储单元中以补码形式存储.整数的补码是他的二进制,负数的补码是他绝对值的二进制按位取反在加1.最高位代表正负.
- %d 十进制输出,%c 字符形式输出 %s 字符串输出 %f 浮点数 %e 指数 %o 八进制 % x 十六进制 %u无符号整型 %g浮点数
- 字符串数组会自动在有效字符的后边加一个 '\0' 结束位,标识字符串结束.
- 在调用函数过程中,系统会把实参的值传递给被调用函数的形参.实参向形参传递是值传递.形参和实参占有不同的存储单元,形参的值发生改变,无法修改实参的值.
- 数组元素可作为函数实参.不能作为函数形参.因为形参的空间是临时分配的.用数组元素做实参时,把实参的值传递给形参,是值传递的方式.用数组名做函数实参时,想形参传递的是数组首元素的地址.
- 全局变量.定义在函数外的变量.局部变量.定义在函数内的变量.
- 全局变量存放在静态存储区.局部变量,函数形参,返回值存储在动态存储区.
- 变量和函数有两个属性.数据类型(int ,float) 存储类别(auto,statis,register,extern)
- 局部变量不声明为static时,都是auto(自动变量).动态分配存储空间.auto可省略
- static 声明的局部变量在函数结束后不会消失且保存原值.静态局部变量在静态存储区分配存储单元.在编译时赋初值,且只赋初值一次.
- register 声明的变量叫寄存器变量.存放在cpu的寄存器中,读取速度快.
- extern 声明的全局变量,可以把该外部变量的作用域扩大.
- 全局变量用static修饰后叫静态外部变量.只能在本文件使用.
- 内部函数. 用static修饰,只能再本文件中被访问. 外部函数,用extern修饰,可以被其他文件访问.可省略.
- 一个变量专门存放另一个变量的地址,它叫指针变量. 指针就是地址的意思.
- int * point; 指针定义. 用来指定指针变量point 可以指向的变量类型. *point 用来获得该指针指向的变量.
& 取地址运算, &a 是a的地址, * 指针运算. int * point =&a; *point 和 a 等价.都表示 a的值. point 和 &a等价,表示a的地址. - 不能通过调用函数来改变实参指针的值.但可以改变实参指针所指向的变量的值.
- 数组名代表数组首元素地址,是一个指针常量. int a[] ={1,3}, int * p =&a[0]; 和 int * p=a;等价.都是a[0]的首地址. * (p+5)==*(a+5) ==a[5]; 若 p=&a[0], 则 *p++ 输出a[0] p==&a[1]; 而 * ++p 输出a[1] p==&a[1];
- 二维数组中, int a[3][4] a代表首行的地址,a+1代表第二行的首地址,a+2代表第三行的首地址.a=&a[0];a+1=&a[1];a+2=&a[2];或者说 a=a[0]; (a+1)=a[1];
a[0] ,a[1],a[2]是一维数组名,代表各行首元素地址既 a[0]==&a[0][0],a[1] = &a[1][0],a[2]=&a[2][0];
a[0]+1 =&a[0][1] ; a[0]+2 =&a[0][2] ; a[1]+1 =&a[1][1] ;
a[0]=(a+0); a[1] =(a+1); a[0]+1 =(a +0)+1=&a[0][1]; a[1]+2=(a+1)+2=&a[1][2];
(a[1]+2)=(*(a+1)+2)=a[1][2];
二维数组相当于指向指针的指针. - int (* p)[4]; 表示 指针变量p指向包含4个整型元素的一维数组. 既p是指向一维数组的指针.
int a[3][4]; int (* p)[4] ; p=a; p 和a 都指向二维数组的第一行. - char str[] =" hello world"; char* strB ="hello world"; 字符串是按照字符数组存储的.所以可以用指针引用.指针strB 指向字符串常量的第一个字符. 字符指针变量的值可以改变. 字符数组代表一个固定的值.(数组首元素地址),不能改变.
- 函数指针.编译时,回味函数代码分配存储空间.这段存储空间的起始地址就是这个函数的指针.可以通过函数指针来调用函数. 定义方式 类型名 (* 指针变量)(函数形参类型) int (* p)(int , int) 只能指向 max(int a,int b) 这种函数.
- 指针数组. 既元素都是指针的数组. int *p[4]; 格式为 类型名 * 数组名[数组长度]; 数组本身就是指针.所以指针数组其实就是 指向指针的指针. int ** a ; == int *p[4] ;
- 堆可以需要时申请内存.不需要时释放.并且只能通过指针来引用.分配内存方法
void *malloc(unsigned int size); 分配一个 size大小的连续空间.返回值是该空间的首地址.
void *calloc(unsigned n,unsigned size)l //分配n个 size大小的连续空间.可以用来保存数组.返回值是空间首地址
void free( void *p) //是否p所指向的动态空间.
void *realloc(void *p,unsigned int size ); p为刚分配的动态空间首地址. 本函数可以重新分配 p指向的空间的大小. - 结构体 .由不同类型数据组成的型数据结构.结构体类型的形式: struct 结构体名 {类型 成员名 ; 类型 成员名;};
struct Student{ int num; char sex;};
结构体类型变量
struct 结构体名{ 成员表列 } 变量名表列; 或者 struct { 成员表列 ;}变量名表列;
结构体指针变量. 指向结构体的地址.可以通过结构体指针变量来操作结构体中的元素;
struct Student p; p->name;==(p).name; 可以得到结构体变量中name的值; - 公用体变量.使几个不同类型的变量共享同一段内存的结构
union 公用体名{ 成员标列 ;}变量表列; 如 union Data{ int i;char ch;float f;} a ,b,c ;
公用体变量大小为最长的成员的内存大小.结构体变量大小为所有成员的内存大小之和;
只能引用公用提变量的成员. 如 a.i; 在同一时间.公用体变量只能存放一个值; - typedef 声明新类型.
typedef int Integer ; 指定用Integer为类型名,作用与int 一样.
typeder struct { int month;int day;int year;} Date; 声明新类型名Data 代表上边的结构体. - 文件读写. 文件类型结构体声明
typedef stuct{ short leval; unsigned flags; char df; unsigned char hold; short bsize;}FIFE;
文件类型指针. FILE* fp; fp指向某一文件的文件信息区域,通过该文件信息区中的信息能访问该文件.
文件打开 FILE * fp= fopen(文件名,使用文件方式); 使用文件方式包括 r,w,a, 只读,只写,追加等.
文件关闭 fclose(文件指针); fclose(fp);
读取文件一个字符 fgetc(fp) ,写入字符 fputc(ch,fp); fgets(str,n,fp); 读取长度n的字符存放早str中, fputs(str,fp); 写入str到fp指向的文件中.
网友评论