C++:按值传递的还有地址

来源:互联网 发布:广元广电网络宽带 编辑:程序博客网 时间:2024/05/16 04:15

在写vector的时候,我对“地址在传入到函数中时它也是一个变量”这个观点更加的清晰了,在写vector的构造函数的时候需要调用一个函数,该函数具有的功能是分配内存空间并将这些空间填充上应有的值。

这个函数如下:

template<class T, class Alloc>typename vector<T, Alloc>::iterator vector<T, Alloc>::allocate_and_fill(size_type n, const value_type& val){    iterator result = data_allocator::allocate(n);    uninitialized_fill_n(result, n, val);    result = result - n;    return result;}

源代码是这样写的,大致的意思就是在以result为起点,对这个迭代器指向的元素进行val的赋值,并对该点及以后的点都是这样进行操作。
但是我之前由于对“地址在传入到函数中时它也是一个变量”理解不深,我认为在将result传入uninitialized_fill_n中后,result也是一步步地向前走,然后当循环n次后退出。

但是我在调试的时候,发现走到最后一步return result;的时候,result显示的地址是一个很大的负数,很明显result所指向的这个地方并没有被初始化。但是明明在uninitialized_fill_n(result, n, val);中已经进行初始话了啊?

这个时候我才反应过来:我们在uninitialized_fill_n(result, n, val);中传进去的是result的副本,result并没有进行变化,在uninitialized_fill_n(result, n, val);中每次循环确实都是将地址进行了++操作,但是那是地址的变化,result这个变量并没有变化,还是表示的是申请新内存所返回的指针。

所以最后的做法将result = result - n;注释掉就可以了,记住:将表示地址的变量传到函数中时,穿进去的是变量的副本,副本表示的是地址。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 擤鼻涕鼻子周围红肿爆皮怎么办 洗衣机有鼻涕虫洗过的衣服怎么办 手机丢了里边有穿内衣照片怎么办 脸上不知是过敏还是湿疹流水怎么办 一个月的宝宝鼻子不通气怎么办 六个月的宝宝有清水鼻涕怎么办 一岁三个月宝宝流清鼻涕怎么办 宝宝流清水鼻涕怎么办最简单方法 8个月宝宝流清鼻涕怎么办 7个月宝宝流清鼻涕怎么办 9个月宝宝流清鼻涕怎么办 十一个月宝宝流清鼻涕怎么办 18个月宝宝咳嗽有痰怎么办 2个月宝宝鼻子不通气怎么办 两个月的宝宝鼻塞不通气怎么办 两个月大的宝宝鼻子不通气怎么办 宝宝6个月咳嗽有痰怎么办 6个月的宝宝有痰怎么办 小孩流有点咳嗽和脓鼻涕怎么办 6个月的宝宝流鼻涕该怎么办? 小孩鼻塞不流鼻涕总吸鼻子怎么办 四个多月宝宝感冒鼻塞严重怎么办 怀孕6个月严重感冒鼻塞怎么办 16个月的宝宝上火流鼻血怎么办 小狗咳嗽打了针还不好怎么办 孕妇感冒后鼻涕带血口腔发炎怎么办 宝宝出生17天睡眠不安稳怎么办 月子里宝宝睡觉老是睡不安稳怎么办 孕妇晚期咳嗽鼻涕黄咽喉痛怎么办 狗狗流脓鼻涕拉稀没食欲怎么办 孕妇眼睛充血很快就有眼屎怎么办 婴儿的眼睛流泪生眼屎怎么办呀 刚出生的婴儿眼睛有眼屎怎么办 25天的婴儿鼻子有鼻屎不通怎么办 一个月的宝宝好多鼻屎怎么办 隆鼻取线的时候好多鼻屎怎么办 小孩流浓鼻涕怎么办最简单方法 小孩流黄鼻涕怎么办最简单方法 一岁八个月宝宝鼻涕和痰多怎么办 空调铜管过不了预埋管的弯头怎么办 如果朝鲜和韩国打起来中国怎么办