编程注意事项及技巧(C/C++)
编程习惯
- 每写一段程序就测试程序是否正确。总之就是写一段验证一段
- 做除法运算时,一定要检测分母为零的情况
- 尽量多使用小于符号 便于程序理解和程序的规范(比如二分查找)
编程技巧
-
如果数字大的离谱,说明有技巧或者规律
-
循环时使用位运算可以大大提高速度
-
除法用辗转相除法
-
指针:
p+i
a+i
&a[i]
等价(p+i)
(a+i)
a[i]
等价p[i]
(p+i)
等价a[i] [j]
,* (*(p+i)+j)
等价于p [i] [j]
-
char *p p="hello"
(当赋值后,值不能再被修改。但是可以对p
重新赋值) -
&a
相当于管辖范围上升了一级*a
相当于管辖范围下降了一级 -
int sum(int a[])
将形参数组名作为指针变量来处理 -
const int *p
当p
被赋值后p
所指向的值不能再被修改,但是p
可以被重新赋值 -
int *function(int sum)
返回指针的函数。必须确保返回的地址有意义,返回全局变量的地址,不是非全局变量,返回静态局部变量,而非动态 -
C语言中每一个函数都有地址
-
算数组个数:
sizeof(a)/sizeof(a[0])
-
定义结构体的时候,里面的变量可以不能初始化。因为定义结构体时,并未给其分配内存,所以初值是无法存储的
-
打表,就是把各个情况的答案列举出来,然后对应输出来
-
注意:前序遍历的结果使用堆栈改变根节点和左子树的输出顺序后,前序遍历的结果成了中序遍历。因为堆栈交换了根节点和左子树的输出顺序,当然也能交换左右子树的输出顺序等其他树输出的顺序
-
C/C++库中,
qsort
比较函数的返回值是int
而sort
是返回bool
-
由于结构体内存在
next
指针,而申请结构体空间后同时定义了next
指针,此时next
指针未指向任何空间,在测试时可能导致错误 -
参数的传递是将实参的值赋给形参。然而对于数组来说却是一个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后面元素时再按照这个地址和数组下标去查找
-
C语言中正无穷大,头函数:
#include <limits.h>
,无穷大INT_MAX
,无穷小INT_MIN
文献参考 -
当用多重循环枚举答案时,定义一个标志并且设置为循环条件。一旦找到循环条件不成立就退出所有循环
-
求素数:筛法(最快)
-
三目运算符:
c=a>b?a:b
字符串
%c
会读取任何字符,包括换行和回车。其他格式输入,如果空格出现在前面,会被摒弃掉- 字符前面有回车,一定要先用
getchar()
把回车吸收掉 - 尽量不要使用
getchar()
- 字符串的处理一定要注意:完了之后要在最后一个元素手动加一个
‘\0’
- 对于字符数组而言,数组名可以直接打印出数组里面的全部字符。如果指针不是值得首元素,那么将打印指针所指向的字符以及后面全部的字符
int atoi(char* s)
字符串转换成整型数- strcmp比较字符串时与最后的
‘\0’
无关 - 使用strlen计算字符串长度时,
‘\0’
它不算进去
原文地址:https://www.cnblogs.com/tzfs/p/14828975.html
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装ubuntu虚拟机)-(5)
- 从MapX到MapXtreme2004[9]-标注的强调显示
- 【第一季】Vue2.0内部指令
- 从MapX到MapXtreme2004[9]-标注的强调显示
- 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题
- 常用Lambda表达式实例
- centos6.8部署vnc服务
- linux下的缓存机制及清理buffer/cache/swap的方法梳理
- 分组合计且排序和显示名称
- silverlight动态读取txt文件/解析json数据/调用wcf示例
- Junit加载Spring容器作单元测试_添加事务回滚
- 实现三遍决策树,你就会想出更快的算法!
- 将一段复杂文本变成字符串的赋值语句
- Linux下squid代理缓存服务环境部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 仿余额宝数字跳动动画效果完整代码
- Android中判断listview是否滑动到顶部和底部的实现方法
- Android开发实现的简单媒体播放器功能示例
- Android中的颜色表示的详解
- android使用SoundPool播放音效的方法
- android中Context深入详解
- Android中Notification通知用法详解
- Android build文件的删除的方法
- Android自定义Notification添加点击事件
- 深入理解Android Bitmap
- Android基于AlarmManager实现用户在线心跳功能示例
- 详解Android中获取软键盘状态和软键盘高度
- Android流式布局FlowLayout详解
- Linux 专题
- Go语言实现UDP通信