编程注意事项及技巧(C/C++)
编程习惯
- 每写一段程序就测试程序是否正确。总之就是写一段验证一段
- 做除法运算时,一定要检测分母为零的情况
- 尽量多使用小于符号 便于程序理解和程序的规范(比如二分查找)
编程技巧
-
如果数字大的离谱,说明有技巧或者规律
-
循环时使用位运算可以大大提高速度
-
除法用辗转相除法
-
指针:
p+ia+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’它不算进去

浙公网安备 33010602011771号