初学C++之总结感受

  1. C++中使用new关键字创建实例时,编译器会为新的实例对象分配一块内存空间,并返回内存空间的首地址,即对象指针,因此不像java一样,new关键字返回的是对象的引用.
  2. C++中对于未初始化的整形变量,在debug时会输出成-858993460,这是因为debug时,未初始化的变量执行内存0xcccccccc处,而该处存储的值是-858993460,但在release时,未初始化的整形变量会输出0,这是因为release是默认将对象空间内的变量值清零.
  3. 关于形参和实参的理解,形参传递的是数值,实参传递的地址,举个例子
void change(int a, int b){
    tmp = a;
    a = b;
    b= tmp;
}
这段代码其实在内存中可解释为(猜测)
function: change
    int a;
    int b;
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}

可以看出,在编译的时候编译器会自动为change新建两个变量a和b,并将传入的值写入到局部变量a和b的内存空间中.因此change交换的只是临时变量的值,并未改变原来的值.
比如我们在main函数中,执行如下代码:
int main(){
    int x = 3;
    int y = 5;
    change(x,y);
    cout<<x<<endl;
    cout<<y<<endl;
}
这是输出的结果仍是3和5,我们并未改变x和y的值,我们改变的只是change方法内局部变量a和b的值。那么我们是怎么知道编译器为change方法新建了两个局部变量a和b的内,我们可以做个试验,在change方法内,我们现实的声明 int a; int b;代码如下:

void change(int a,int b){
    int a;
    int b;
}
这是编译器会抛出一个错误,提示我们变量a和b被重复定义了,这说明局部变量a和b已经被定义了,所以我们在change方法内再定义一次的话,肯定会抛出这个错误的.因此可以肯定编译器为change方法新建了两个局部变量a和b.
那么实参传递代码又是如何被解释的呢?还是以change方法为例,代码如下:
void change(int &a, int &b){
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值