C/C++注意点

  • 类的内存分配(注意内存对齐)
    设指针的内存占ptr_size字节(32位是4字节,64位是8字节)
    1.普通类
class A{
    public:
    int a;//4个字节
    char b;//1个字节
    void f(){//不占内存
        cout<<"A"<<endl;
    }
};
A a;
cout<<sizeof(A)<<" "<<sizeof(a)<<endl;//out: 8 8(字节对齐)

2.含有虚函数的类

class A{
    public:
    int a;//4个字节
    char b;//1个字节
    virtual void f(){//虚指针站内存ptr_size
        cout<<"A"<<endl;
    }
};
A a;
cout<<sizeof(A)<<" "<<sizeof(a)<<endl;//out: 16 16(4+1+8字节对齐后为16)

3.继承类

class A{
    public:
    int a;//4个字节
    char b;//1个字节
    virtual void f(){//虚指针站内存ptr_size(无论几个虚函数只有一个虚指针)
        cout<<"A"<<endl;
    }
    virtual void g(){//虚指针站内存ptr_size
        cout<<"A"<<endl;
    }
};
class B:public A{//继承了A的int、char 和虚指针
    int c;//4字节
};
cout<<sizeof(B)<<endl;      //out:24(4+1+4+8字节对齐24)

4.多继承

class A{
    virtual void f(){}
    virtual void g(){}
};
class B{
    virtual void h(){}
};
class C:public A,public B{
    ...
};
cout<<sizeof(C)<<endl;//out:16(继承了一个A的虚指针,B一个虚指针)

赋值问题

int a=1;
int main(){
    int a=a;//此时右值a为局部变量,值不确定,实测输出为0(很危险)
    int x=2,y=3,z;
    z=(x==y);//z为0,相等返回1
    z=(x=y=5);//x,y,z均为
}

位运算

int x;
x=x&(x-1);//x二进制中最右边1变为0,即x的1的个数减1

函数参数压栈顺序

从右往左

int arr[4]={6,7,8,9};
int *ptr=arr;
printf("%d","%d",*ptr,*(++ptr));//out:7 7(从右往左压栈)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值