有关vector元素的取地址
1--原则上,最好不要对vector的元素取地址,除非所有的vector元素已经填充完毕,这样vector的元素不会发生位置移动,地址才不会变,这样才能确保取得的地址的有效性。PS:即使在可以用已经分配好内存的vector的取地址来完成链表的任务的情况下也不建议用,因为在vs的编译器能通过的情况,在g++编译器不一定能通过。
void fill(vector<st> &veca,const int&n)
{
st ss;
ss.val=0;
ss.lc=ss.rc=NULL;
veca.push_back(ss);
for(int i=0;i<n;++i)
{
scanf("%d",&ss.val);
veca.push_back(ss);
}
for(int i=1;i<=n;++i)
{
int k,tt;
scanf("%d",&k);
for(int j=0;j<k;++j)
{
scanf("%d",&tt);
if(j==0)
veca[i].lc=&veca[tt]; <span style="color:#ff6666;"><strong>//can get the address</strong></span>
else
veca[i].rc=&veca[tt];
}
}
}
2--如是在vector元素填充过程中间,对元素取地址,编译系统是默认取不到地址的,这也是为了确保程序的安全性。
void build(st **tre,vector<st> &vect)
{
int tt;
scanf("%d",&tt);
if(tt==0)
{
tre=NULL;
return;
}
st tr;
tr.val=tt;
tr.pre=tr.next=NULL;
vect.push_back(tr);
printf("%ld\n",&(vect.back()));
*tre=&(vect.back()); <span style="color:#ff0000;"><strong>//can not get the address of vect.back()</strong></span>
printf("%d\n",(*tre)->val);
build(&((*tre)->pre),vect);
printf("%d\n",(*tre)->pre->val);
build(&((*tre)->next),vect);
}
3--一般涉及到与链表相关的取地址的,还是用new操作/malloc申请内存空间来对元素处理吧,省事而且安全。
有关vector元素的取地址的更多相关文章
- C语言的数组名和对数组名取地址
http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针, ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- [转载]C++中 引用&与取地址&的区别
一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用. 例如: int &rf; // 声明一个int型的引用r ...
- C语言对数组取地址
#include <stdio.h> main() { ] = {,,,,}; printf("a=%p\n" , a); printf("a=%p\n&qu ...
- 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good
这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...
- 数组名取地址所算数运算应注意的"trap"
数组名取地址所算数运算应注意的"trap" 直接看代码: #include <stdio.h> int main() { int array[5]; printf(&q ...
- C++中 引用&与取地址&的区别
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- php的foreach中使用取地址符,注意释放
先来举个例子: <?php $array = array(1, 2, 3); foreach ($array as &$value) {} // unset($value); forea ...
随机推荐
- Top 9 colleges in the world from 2010 to 2020, AI and interdisciplinary areas.
http://csrankings.org/
- make工具简介
在Linux C/C++的开发过程中,当源代码文件较少时,我们可以手动使用gcc或g++进行编译链接,但是当源代码文件较多且依赖变得复杂时,我们就需要一种简单好用的工具来帮助我们管理.于是,make应 ...
- 图解 Kafka 水印备份机制
高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...
- Spark性能调优-高级篇
前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问 ...
- 浏览器 User-Agent 整理
也可以去这里查询:http://tools.jb51.net/table/useragent window.navigator.userAgent 1) Chrome Win7: Mozilla/5. ...
- vue 事件总线(bus)
1.全局引入bus Vue.prototype.$bus = new.Vue() 2.组件间传值使用(在发送事件时接收组件会实时接收到, 可以用做兄弟组件间相互传值, 但页面跳转组件间有问题 通过$e ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:花瓣识别
import os import glob import os.path import numpy as np import tensorflow as tf from tensorflow.pyth ...
- 什么是函数,干嘛啊,怎么干。一个py程序员的视角.md
目录 前言 本质 math definition py definition class 是类,是对象的蓝本 回到函数 一个结论 self 是什么? 以上就是py世界里函数的定义 什么是函数,干嘛啊, ...
- 【JQuery 选择器】 案例
1.查找以id的某个字段开头的元素 setTimeout(function () { $("a[id^='menu_']").each(function () { $(this). ...
- Spring、SpringMvc、MyBatis 整合
web.xml SSMProject示例项目下载 SSMProject_jar包 <?xml version="1.0" encoding="UTF-8& ...