C语言小结

来源:互联网 发布:psv破解软件下载 编辑:程序博客网 时间:2024/05/21 14:57
  1 C语言小结                                                                                                                        
  2 说明以下const常量
  3 int const a;/const int a; 都表示一个常量整数a里存的数据不可改变
  4 通常使用前者定义;
  5 
  6 int * const a;首先让离const最近的那个符号先与const结合,如int const就是整型数不能被改变
  7 如* const就是指针为常量指针不可被改变
  8 所以上述定义表示a时一个指向整数的常量指针,a的地址不可被改变,a里存的整数可以改变
  9 
 10 const int * a;/int const * a;首先确定整型数不可被改变
 11 也就是a是一个指向整型常量的指针,a的值可以被改变 而*a不能改变
 12 
 13 int const * const a;表示一个常量指针指向了一个整型常量
 14 即:a和*a都不可被改变
 15 
 16 一个c文件中的变量问题:
 17 一个C文件中的全局变量如 int a;
 18 首先这样写表示声明,如int a = 0;表示定义
 19 以上两种写法都默认a属于全局static变量,如果加上static int a;更明确而已
 20 此时的全局变量在其他c文件中可以使用,但是有一个前提条件就是:
 21 在其他C文件中使用a时必须加外部声明:
 22 extern int a;(注意此处只是声明,而不能定义)
 23 使用了外部声明之后在c文件中才能使用a变量;
 24 
 25 指针数组的问题:
 26 因为[]的优先级比*高
 27 如int * a[2];从左到有a先于[]数组结合,首先a是数组,然后再与*指针结合
 28 也就是数组里保存的是指针两个元素的指针指向整型数,

 29 a[0]和a[1]都是指针;此写法叫指针数组

 30 如int (*a)[2]先读取()中的内容即a与*先结合a是一个指针然后在于数组[]结合
 31 即a是一个指针变量指向一个含有2个元素的整数数组;
 32 如int p[4][2], int (*a)[2] = p;
 33 *a + i也就是p[0][i]的地址
 34 *(a+n)+m也就是a[n][m]的地址
 35 此写法叫做数组指针

 36 
 37 指针函数与函数指针
 38 如void * init_list(int a, int b);
 39 此类为指针函数返回(void *)类型的指针,void *类型可以强制转换为所有类型的执行
 40 而且不用担心内存越界的问题;
 41 如 int * a;
 42 a = (int *)init_list(a, b);
 43 如int (* init_list)(int a, int b);/ void (* init_list)(int, int);
 44 此类为函数指针,是一个指针变量的声明 该指针指向的函数返回int整型数据;
 45 如 int sum(int a, int b)
 46    {
 47        return a+b;
 48    }
 49 init_list = sum;
 50 此时init_list函数指针便指向了一个求和的函数;

0 0
原创粉丝点击