【C++】编程理解错误总结

编程理解错误总结



前言

这是一个错题本,将编程中犯的一些错误总结下来。


一、语法错误

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);
    }
//这种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;
  • 忘记定义变量
  • 两个变量搞混用错
  • 拼写错误
  • 忘记声明函数

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值