C语言基础

2017-11-14  本文已影响0人  刘佳阔
  1. 符号常量 # define PI 3.1416
  2. 常变量 const int a =3; 有类型,占存储单元,不可以改变值
  3. 变量在存储单元中以补码形式存储.整数的补码是他的二进制,负数的补码是他绝对值的二进制按位取反在加1.最高位代表正负.
  4. %d 十进制输出,%c 字符形式输出 %s 字符串输出 %f 浮点数 %e 指数 %o 八进制 % x 十六进制 %u无符号整型 %g浮点数
  5. 字符串数组会自动在有效字符的后边加一个 '\0' 结束位,标识字符串结束.
  6. 在调用函数过程中,系统会把实参的值传递给被调用函数的形参.实参向形参传递是值传递.形参和实参占有不同的存储单元,形参的值发生改变,无法修改实参的值.
  7. 数组元素可作为函数实参.不能作为函数形参.因为形参的空间是临时分配的.用数组元素做实参时,把实参的值传递给形参,是值传递的方式.用数组名做函数实参时,想形参传递的是数组首元素的地址.
  8. 全局变量.定义在函数外的变量.局部变量.定义在函数内的变量.
  9. 全局变量存放在静态存储区.局部变量,函数形参,返回值存储在动态存储区.
  10. 变量和函数有两个属性.数据类型(int ,float) 存储类别(auto,statis,register,extern)
  11. 局部变量不声明为static时,都是auto(自动变量).动态分配存储空间.auto可省略
  12. static 声明的局部变量在函数结束后不会消失且保存原值.静态局部变量在静态存储区分配存储单元.在编译时赋初值,且只赋初值一次.
  13. register 声明的变量叫寄存器变量.存放在cpu的寄存器中,读取速度快.
  14. extern 声明的全局变量,可以把该外部变量的作用域扩大.
  15. 全局变量用static修饰后叫静态外部变量.只能在本文件使用.
  16. 内部函数. 用static修饰,只能再本文件中被访问. 外部函数,用extern修饰,可以被其他文件访问.可省略.
  17. 一个变量专门存放另一个变量的地址,它叫指针变量. 指针就是地址的意思.
  18. int * point; 指针定义. 用来指定指针变量point 可以指向的变量类型. *point 用来获得该指针指向的变量.
    & 取地址运算, &a 是a的地址, * 指针运算. int * point =&a; *point 和 a 等价.都表示 a的值. point 和 &a等价,表示a的地址.
  19. 不能通过调用函数来改变实参指针的值.但可以改变实参指针所指向的变量的值.
  20. 数组名代表数组首元素地址,是一个指针常量. 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];
  21. 二维数组中, 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];
    二维数组相当于指向指针的指针.
  22. int (* p)[4]; 表示 指针变量p指向包含4个整型元素的一维数组. 既p是指向一维数组的指针.
    int a[3][4]; int (* p)[4] ; p=a; p 和a 都指向二维数组的第一行.
  23. char str[] =" hello world"; char* strB ="hello world"; 字符串是按照字符数组存储的.所以可以用指针引用.指针strB 指向字符串常量的第一个字符. 字符指针变量的值可以改变. 字符数组代表一个固定的值.(数组首元素地址),不能改变.
  24. 函数指针.编译时,回味函数代码分配存储空间.这段存储空间的起始地址就是这个函数的指针.可以通过函数指针来调用函数. 定义方式 类型名 (* 指针变量)(函数形参类型) int (* p)(int , int) 只能指向 max(int a,int b) 这种函数.
  25. 指针数组. 既元素都是指针的数组. int *p[4]; 格式为 类型名 * 数组名[数组长度]; 数组本身就是指针.所以指针数组其实就是 指向指针的指针. int ** a ; == int *p[4] ;
  26. 堆可以需要时申请内存.不需要时释放.并且只能通过指针来引用.分配内存方法
    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指向的空间的大小.
  27. 结构体 .由不同类型数据组成的型数据结构.结构体类型的形式: struct 结构体名 {类型 成员名 ; 类型 成员名;};
    struct Student{ int num; char sex;};
    结构体类型变量
    struct 结构体名{ 成员表列 } 变量名表列; 或者 struct { 成员表列 ;}变量名表列;
    结构体指针变量. 指向结构体的地址.可以通过结构体指针变量来操作结构体中的元素;
    struct Student p; p->name;==(p).name; 可以得到结构体变量中name的值;
  28. 公用体变量.使几个不同类型的变量共享同一段内存的结构
    union 公用体名{ 成员标列 ;}变量表列; 如 union Data{ int i;char ch;float f;} a ,b,c ;
    公用体变量大小为最长的成员的内存大小.结构体变量大小为所有成员的内存大小之和;
    只能引用公用提变量的成员. 如 a.i; 在同一时间.公用体变量只能存放一个值;
  29. typedef 声明新类型.
    typedef int Integer ; 指定用Integer为类型名,作用与int 一样.
    typeder struct { int month;int day;int year;} Date; 声明新类型名Data 代表上边的结构体.
  30. 文件读写. 文件类型结构体声明
    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指向的文件中.
上一篇下一篇

猜你喜欢

热点阅读