C 03 关键字:const extren if等
2013-12-31 14:21
253 查看
1.const 只读
1 const本质为只读变量所以我们还是可以通过取得它的地址来改变它的值 这是欺骗编译器的做法 并且部分有效 不建议这么做
2 const修饰的指针:
当const出现在*号左边时指向的数据为常量 当const出现在*号右边时指针本身为常量
我的理解:p代表了指针本身所以 const p自然就是p本身不能变 *p代表所指的内容 自然 const *p就是所指的内容不能变
3 const修饰函数
const修饰函数参数时表示在函数体内部参数的值只读
const修饰函数返回值表示返回值不可改变 多用于返回指针的情形
4 const 修饰成员函数(C++)表示在这个函数中该对象所代表的内存只读或者可以理解为该对象对应的变量只读
2.使用extern 来引进外部变量和类
3.使用static定义变量和函数时会将变量限制在文件内部 文件作用域限定符外部不能通过extern来访问 我们可以使用定义函数来间接的访问static的变量
4.if使用需注意:
1 bool型的变量直接出现于条件中 不要进行比较
2 普通变量和0值比较时,0值应该出现在比较符号左边(工程经验) 工程中禁止比较时将值作为右边的数
3 float型变量不能直接和0进行比较,需要定义精度 来自:《C语言深度剖析》一书:http://pan.baidu.com/s/1kToJU3H
4 0和非0表示false和true与1无关 bool型变量都是不同的厂家自己定义的
5.switch-case-break-default
每个case必须有break否则会导致分支重叠 default最好有 用来处理特殊情况
6.一般函数的设计
统一的资源分配 malloc 执行函数语句 统一的释放资源free
7.void指针的意义
c语言只有相同类型的指针才可以相互赋值 void*指针作为左值用于接收任意类型的指针
8.volatile
多用于多线程的编程告诉编译器不要做优化 必须访问内存 老实点
#include <stdio.h> #include <stdlib.h> int main(void) { int n = 5; const int* p = NULL; p = &n; *p = 10; //!OOPS *p read-only int* const p2 = &n; int n2 = 100; p2 = &n2;//!OOPS p2为常量const指针 return 0; }
1 const本质为只读变量所以我们还是可以通过取得它的地址来改变它的值 这是欺骗编译器的做法 并且部分有效 不建议这么做
eg: const int num_new = 5; int *p =(int*)&num_new; *p = 68;
2 const修饰的指针:
左数右指 分清指针指的数据不变还是指针本身不变
const int *p; // p可变 p指向的内容不可变 int const *p; // p可变 p指向的内容不可变 int* const p; // p不可变 p指向的内容可变 const int* const p; // p可变和p指向的内容不可变即:
当const出现在*号左边时指向的数据为常量 当const出现在*号右边时指针本身为常量
我的理解:p代表了指针本身所以 const p自然就是p本身不能变 *p代表所指的内容 自然 const *p就是所指的内容不能变
3 const修饰函数
const修饰函数参数时表示在函数体内部参数的值只读
const修饰函数返回值表示返回值不可改变 多用于返回指针的情形
4 const 修饰成员函数(C++)表示在这个函数中该对象所代表的内存只读或者可以理解为该对象对应的变量只读
2.使用extern 来引进外部变量和类
3.使用static定义变量和函数时会将变量限制在文件内部 文件作用域限定符外部不能通过extern来访问 我们可以使用定义函数来间接的访问static的变量
4.if使用需注意:
1 bool型的变量直接出现于条件中 不要进行比较
2 普通变量和0值比较时,0值应该出现在比较符号左边(工程经验) 工程中禁止比较时将值作为右边的数
int num = -1; if(0 == num) // 正确的写法 if(0 = num) // 少一个=无法通过编译 if(num == 0) // 工程中禁止的做法 if(num = 0) // 少了一个=也能通过编译 { printf("Hello world!\n"); } else { printf("else\n"); }
3 float型变量不能直接和0进行比较,需要定义精度 来自:《C语言深度剖析》一书:http://pan.baidu.com/s/1kToJU3H
4 0和非0表示false和true与1无关 bool型变量都是不同的厂家自己定义的
5.switch-case-break-default
每个case必须有break否则会导致分支重叠 default最好有 用来处理特殊情况
6.一般函数的设计
统一的资源分配 malloc 执行函数语句 统一的释放资源free
7.void指针的意义
c语言只有相同类型的指针才可以相互赋值 void*指针作为左值用于接收任意类型的指针
8.volatile
多用于多线程的编程告诉编译器不要做优化 必须访问内存 老实点
C/C++ Volatile关键词深度剖析:http://hedengcheng.com/?p=725
9.使用union来判断系统的大小端typedef union data { char c[2]; unsigned short s; }data_t; //c语言中无参数的函数要加void否则会认为是任意类型的参数 c++则不必默认为void int main(void) { point_t point1 = {1, 4}; circle_t circle1 = {1,4,5}; circle_t circle2 = {{3,4},5}; data_t x; x.s = 0x0102; if(x.c[0] == 2 && x.c[1] == 1)//是否是小端字节序 { printf("little endian\n"); } else { printf("big endian\n"); } printf("size=%d\n", sizeof(test_t)); return 0; }
相关文章推荐
- protobuf
- 利用OpenCV实现图像边缘直方图输出
- 主机字节序和网络字节序
- linux下JDK环境变量的几种常用配置
- localhost 与 127.0.0.1 的区别
- 图文详解DevExpress Reports创建数据识别报表
- 总结整理时下流行的浏览器User-Agent大全
- 设置网络打印机并设置密码
- linux 两步搞定 Tomcat 下启用 https:// 访问
- TextField中的属性:text 与 htmlText
- android webview 去掉多点触控 去掉放大缩小
- 政府交通部门如何实现Windows网络的访问控
- Install-Package 那点事儿
- mongodb mapreduce示例
- 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
- Android动画学习笔记-Android Animation
- LoadRunner:工作路径问题
- Android访问网络,使用HttpURLConnection还是HttpClient?
- 创建我们的第一个servlet小程序
- javascript-------插入排序