编程理解错误总结
前言
这是一个错题本,将编程中犯的一些错误总结下来。
一、语法错误
1.1逻辑运算符
- if(){;}else{;}最好加上花括号,不然容易出错
for(int i=0;i<pos.size();i++)
{
string curS = out.substr(pos[i]+1,pos[i+1]-pos[i]-1);
cout<<"*****"<<curS<<endl;
if(!curPath.empty())
cout<<"-----"<<curPath.top()<<endl;
if(curS==""||curS==".")
continue;
else if(curS=="..")
//这个if和下面的else出现了歧义,
//虽然格式是对齐的,但实际逻辑不对
if(!curPath.empty())
curPath.pop();
else
curPath.push(curS);
}
1.2 数组、string
- 数组名作为函数参数时变量是引用不是传递
int uniquePaths(int m, int n) {
vector<int> CurP(2,0);
return Ways(CurP, -1, m, n);
}
//如果使用 intCurP[2] 作为形参,则其元素值会被改变并且体现在外面,影响递归
int Ways(vector<int> CurP, int Move, int m, int n )
{
if(Move==0)
CurP[0] ++;
if(Move==1)
CurP[1] ++;
if(CurP[0]==m-1&&CurP[1]==n-1){
return 1;
}
if(CurP[0]>m-1||CurP[1]>n-1){
return 0;
}
return Ways(CurP , 0 , m, n)+Ways(CurP, 1, m, n);
}
-
char[]可以和string作比较,但不能和字符串常量作比较
//这种if永远不会成立
char[] filename ;
if( filename == "SystemLog" )
{
cout<<"equal"<<endl;
}
//这种if在相等时会成立
char[] filename ;
string temp = "SystemLog";
if( filename == temp )
{
cout<<"equal"<<endl;
}
1.3容器
- vector不是模板
//必须同时加上如下代码,缺一不可
#include<vector>
using namespace std;
- vector初始化时是左开右闭
///注意!!! 左开右闭,必须到最右边的下一位
vector<int> sub_1(num.begin()+low, num.begin()+mid);
1.4指针
-
可以直接定义一个结构体指针,但不可以定义指向指针的指针。
-
指针可以等于指针,可以等于地址
int a;
int* pa = &a;
int* pb = pa;
- p = &a和*p = a的区别详解
//p=&a就是用a的地址对p赋值,&p不改变,变的是p
// *p=a就是把p所指向的那一内存空间的值赋值为a,&p和p都不改变,变的是p所指向的那一内存空间的值
- 对于指针的指针,取值符再取成员变量要加括号
*ppHead = (*ppHead)->_pNext;//正确
*ppHead = *ppHead->_pNext;//错误
- 指针开辟内存后内容为空,但赋值后即使重新new,内容还是原来内容
BYTE *pDefaultReadData = NULL;
pDefaultReadData = new BYTE [iReadLen_Default];
1.5文件
- fread读取长度
//方式一:一次读一字节,读取四次
fread(pDefaultReadData,1,4,pInputFile);
//方式二:一次读四字节,读取一次
fread(pDefaultReadData,4,1,pInputFile);
//关键点,如果数据只有三字节,则方式一读取三字节,方式二读取零字节
//补充,fread()函数的输出是读取的数据长度
- fwrite()函数写二进制文件,应该使用"wb"。如果·用"w",“w+”,均会出错,“随机”多保存一个字节"0D";
1.6链表、树
-
cur = NULL;直接赋值,不需要取地址,NULL本身是地址
-
删除一个结点
ListNode* ne = new ListNode(1);
delete(ne);
ne=NULL;
用delete,不是free
二、常出现的编译错误(Bug free)
- 忘记加头文件
- 忘记 using namespace std;
- 忘记定义变量
- 两个变量搞混用错
- 拼写错误
- 忘记声明函数
总结
无