C--复习笔记

来源:互联网 发布:点数图交易软件 编辑:程序博客网 时间:2024/04/30 15:18
<span style="font-size:14px;">int (*a)[10];a是指向具有10个整型数数组的指针int (*a)(int);a是一个函数指针,通过用于回调函数int (*a[10]) (int);a是一个有十个函数指针的数组,每个指针指向一个返回值是int,参数是int的函数只有全局变量和static变量能存储在静态存储区(固定内存中),静态存储区的变量只初始化一次(下次再对该变量初始化会跳过)且直到程序结束才释放该变量静态存储区的变量会初始化为0,所以全局变量和静态变量初始化为0自动变量(局部变量):局部没有经过任何修饰的局部变量叫自动变量 (它存在于动态数据区——栈),这个区域内的数据随着程序的运行动态的生成和释放,函数返回就释放,函数要调用就生成。关键字:默认是atuo(一般不写)static变量的三个作用:隐藏,持久性和初始化为0/t是垂直制表符,会上下垂直对齐,一般是8个空格关键字const是"只读"的意思,不能写。作用是保护数据,防止被随便修改const int a;==int const a;const int *a;a指针指向一个int型的常整数int * const a;a指针是一个常指针,不能被改变int const *a const;a指针是一个常指针且指向一个常整数如果你在函数外这样声明一个变量,const int a ; 变量a的连接性为内部链接,只能在定义他的文件内使用关键字volatile 修饰易失性变量,使用的场合:(1)并行设备的寄存器(如:状态寄存器,控制寄存器等)(2)被中断访问的非局部变量(全局变量或静态变量)(3)多线程中的共享变量可以用const修饰volatile,同时一个指针也可以是volatile类型的关于volatile的一段经典代码:int square(volatile int *ptr){return *ptr * *ptr;}相当于:int squere(volatile int *ptr){int a=*ptr;int b=*ptr;return a*b;}上面这段代码是想求*ptr的平方,但是当第二次读取*ptr时,如果有其他线程修改了*ptr的值,那么得出来的结果就不是你想要的了所以应该这么该:int square(volatile int *ptr){int a=*ptr;return a*a;}用__interrupt修饰的中断服务子程序(ISR):(1)不能有返回值(2)不能有参数(3)double型和printf是不可重入,因此它们是不明智的unsigned int a=3;int b=-18;a+b时,b会自动转换成unsigned int类型,a+b会是一个很大的整数typedef和#define定义一个结构体的区别:#define dps struct s *typedef struct s * tps;当定义一个变量时两个一样,当定义多个变量时,如:dps p1,p2;展开为struct s *p1,p2;此时p2是一个结构体变量而不是指针sprintf函数,形式:sprintf(char * buf,const char * format,[argument]...);  将字符串abc放到ptr所指的区域printf函数可以这样用:printf(prompt);其中prompt是一个char型指针,指向一个字符串。自动化变量(局部变量)位于栈区(stack),使用malloc申请的内存位于堆区(heap),malloc申请的内存程序结束后也会自动释放。栈的空间相对较小,所以需要大的内存时用malloc申请堆的空间非自动变量(全局变量和静态变量)的内存是固定内存库函数(API)实际是对系统调用的封装</span>


0 0
原创粉丝点击