1.函数指针:即指向函数类型的指针,用于回调。
函数名,就是函数的地址。
语法:返回类型 (*指针名)(参数列表);
例:int (*fun)(int,int);(声明)
fun = 函数名;(实现)
fun(,);(调用)
2.指针的指针:即地址的地址(二级指针)
3.宏。简单的替换作用
4.typeef:重新定义类型的新名字
5.枚举:实质是整型。
常用于与switch匹配,当一个变量只有几种可能,就可以定义枚举,优化可读性。
6.static在程序加载时就分配内存。
静态区:存储静态变量,程序运行过程中变量一直存在,程序关闭变量才被系统回收。作用:记录某值的状态。
栈区:存函数体内的局部变量,变量使用后系统自动释放。效率高,空间有限。
堆区:存malloc、对象。手动释放。
局部static与全局(外部)static区别:局部变量只是在局部使用,其作用域不一样。
外部extern用于:1.声明外部函数2.外部文件中声明外部变量。Extern和static共同点:具有共享变量特点。不同点,extern的作用域是最广的,作用于整个程序。
寄存器Register常用于声明循环控制变量,提高运算速度。
7.const用于修饰不允许改变的变量。
与#define区别:const是运行时内存实际存储;#define在编译期进行处理。
*前*后const.
关于const:http://www.cnblogs.com/icemoon1987/p/3320326.html
#define MAX1(A,B) A>B?A:B static int i = 0; int getSum(int a,int b); int getSum(int a,int b) { int result = a + b; return result; } void getSum2(int a); void getSum2(int a) { printf("%d ",a); } enum weekday{ Monday = 0, Tuesday, Wednesday, Thursday, Friday }; int fun1() { i++; printf("i = %d ",i); static int s = 1; s++; printf("static s = %d ",s); int a = 0; int c = a +1; return c; }; int main(int argc, const char * argv[]) { /* // 二级指针 // int a =10; // int *p = &a; // int *m = &p; //出错 // printf("a = %d",*m); int a =10; int *p = &a; int **m; m = &p; printf("a = %d,*p = %d ",**m,*p); char * str[3] = {"iphone","android","hello"}; char *p1 = str; char **m1 = &p1; printf("%s ",**m1); */ /* //函数指针 int (*fun)(int,int); //定义一个函数指针 fun = getSum; //fun = getSum2;出错,参数个数不对应 int c = 0; c = fun(3,4);//c = (*fun)(3,4); printf("c = %d ",c); //hong int d = MAX1(3,5); printf("max = %d ",d); //枚举 enum weekday m = 0;//或者enum weekday m = Monday; m = 1; m++; switch (m) { case Monday: { printf("上课"); break; } case Tuesday: { printf("还是上课"); break; } case Wednesday: { printf("上机"); break; } default: break; }*/ //static fun1(); fun1(); //const1 int x = 10,y = 11; const int *t = &x; t = &y; //*t = 20;出错。指针可以改变,但是不能通过此指针改变所指的数值。只读作用(做参数时可以防止返回多个值) //2 int * const r = &x; //r = &x;出错。指针不能改变,但是指针所指向的内容能通过此指针改变。 *r = 20; printf("%d,%d ",*t,*r); return 0; }
1ex
给定char*str[3] = {"ios","ipod","ipad"};将每个字符串中的i去掉并保存到数组中。然后输出字符串数组str
int main(int argc, const char * argv[]) { char a[] = "ios"; char b[] = "ipod"; char c[] = "ipad"; char * str[3] = {a,b,c}; char **p = str; for (int i = 0; i < 3; i++) { printf("*p = %s ",*p); char *m = *p; char *n = m + 1; while (*m != '