取地址与解引用

一般来说,我们有一个取地址符 & 可以返回该变量的地址.

int main(){
int a;
cout<<&a;
}
0x6ffe1c

如果我们现在有一个地址,我们还可以对它进行解引用 *,来返回这个地址上的值.

int main(){
int a=5;
cout<<&a<<endl;
cout<<*(&a);
}
0x6ffe1c
5

从这里可以看出,取地址与解引用是互为逆运算的.

指针变量即是存储地址的变量,它的类型取决于它指向的变量是什么.

显然,一个变量和它的指针变量间的转化,就是通过取地址与解引用这两个操作.

int main(){
int a=5;
int* p=&a;
cout<<p<<endl;
a=*p;
cout<<a<<endl;
}
0x6ffe1c
5

小叙 对于指针变量的定义

指针变量定义时的 * 是跟着变量名的,也就是说,如果你使用

int* a,b,c;

你只会定义一个指针变量和两个整型变量.

此外,你可以通过给指针赋地址和给指针的解引用赋正常值两种办法来赋值.

int main(){
int a=5;
int *p1,*p2;
*p1=a;
p2=&a;
}

箭头取地址符

假设我们有这么一个结构体

int main(){
struct hdk{
int a,b;
};
hdk *p=;
}

那么我们想调用这个结构体里的变量,恐怕就要这么写了:

(*p).a=1;

因此,箭头符号应运而生

p->a=1;

我们还可以直接用指针变量直接存储值.

int main(){
struct hdk{
int a,b;
};
hdk *p;
*p=hdk{1,2};
cout<<p->a<<" "<<p->b;
}

数组指针与指针的运算

当一个指针被定义在数组中时,它就具有了运算的意义. 一般我们使用的有加法和减法,在指针中分别用来表示上一位和下一位.

int main(){
int a[5]={1,2,3,4,5};
int *p=a;
for(int i=1;i<=5;++i){
cout<<*p<<" ";
p++;
}
}
1 2 3 4 5

另外地,还有指针与指针的减法,可以用来获取两个指针间的距离.

int main(){
int a[5]={1,2,3,4,5};
int *p=a,*p0=a;
for(int i=1;i<=5;++i){
p++;
}
cout<<p-p0<<" "<<p0-p<<endl;
}
5 -5

迭代器

迭代器的本质也是指针,不过是stl的指针.

定义方法:STL类型 ::iterator

int main(){
vector<int> a{1,2,3,4,5};
vector<int>::iterator p;
for(p=a.begin();p!=a.end();++p){
cout<<*p<<" ";
}
}
1 2 3 4 5

值得一提的是,.begin().end() 也是指针,一个是容器第一个数的地址,一个是最后一个数的下一个地址.

函数指针

假如几个函数参数相同,就可以通过函数指针替换.

以两个 (int,int) 函数为例.

int(*hdk)(int,int);
int test1(int a,int b){return a+b;}
int test2(int c,int d){return c*d;} int main(){
int x,y;
cin>>x>>y;
if(x>0){
hdk=test1;
}
else{
hdk=test2;
}
cout<<hdk(x,y);
}

指针批量申请与指针的删除

    struct a{
int x,y;
};
a* p=new a{1,2};
delete p;
int *e=new int[114];
delete[] e;

[OI] 指针与迭代器的更多相关文章

  1. C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)

    [1] string基础 [1.1] string 的构造 #include <iostream> #include <string> int main() { using n ...

  2. C++面向对象编程之point-like classes的智能指针和迭代器、function-like classes即仿函数

    1.智能指针 智能指针里面包含其他指针的形式和 委托 感觉比较像; 智能指针一定都需要重载 * 和 -> 操作符 ; 这个符号它作用后还能再继续作用下去; 2.迭代器: 这里主要关注 * 和 - ...

  3. 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器

    小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...

  4. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  5. C++STL之迭代器

    迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值.例如, ...

  6. C++ 迭代器介绍 [转摘]

    转摘地址为:http://blog.chinaunix.net/uid-20773165-id-1847758.html 迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭 ...

  7. 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)

    一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = &num; printf( ...

  8. STL六大组件之——迭代器这个东西

    迭代器:除了在其它语言中司空见惯的下标法访问容器元素之外,C++语言提供了一种全新的方法——迭代器(iterator)来访问容器的元素.迭代器其实类似于引用,指向容器中某一元素.换个方式来说,容器就是 ...

  9. STL迭代器iterator

    一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...

  10. Iterator接口(迭代器)

    目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...

随机推荐

  1. SEO初学指南之关键词研究(3) - 关键词分析实战

    经过之前的学习,这次我们开始实战.手把手教大家如何为网站筛选符合条件的关键词. 还不熟练的,建议再反复学习前两篇文章: SEO初学指南之关键词研究 (1) - 入门 SEO初学指南之关键词研究 (2) ...

  2. 免费正版 IntelliJ IDEA license 详细指南

    一.前言 IntelliJ IDEA 一直是我非常喜欢的 IDE 自从用上之后就回不了头了,但是 Ultimate 版本的费用十分昂贵,其实 JetBrains 自己就提供了6种免费申请授权的方式:本 ...

  3. 【ActiveJdbc】02

    一.基本的数据库操作 数据模型层: import org.javalite.activejdbc.Model; 数据访问层: import org.javalite.activejdbc.Base; ...

  4. 【Layui】05 选项卡 Tabs

    文档位置: https://www.layui.com/doc/element/tab.html 案例演示: <div class="layui-tab"> <u ...

  5. 强化学习、分布式计算方向的phd毕业后去企业的要求

    实验室慕师弟马上要phd毕业了,虽然我是遥遥无期,但是看到身边同学可以上岸还是提师弟高兴.由于师弟准备去企业工作,于是乎我也不免好奇起来phd毕业后去公司会有什么样的要求,于是网上找了找招聘信息,挑了 ...

  6. 如何为华为超算平台设置cuda路径

    在提交主机上修改.bashrc文件: 第一种: 使用运行主机上的cuda环境: # CUDAexport PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LI ...

  7. 神经网络之卷积篇:详解更多边缘检测内容(More edge detection)

    详解更多边缘检测内容 已经见识到用卷积运算实现垂直边缘检测,在本博客中,将看到如何区分正边和负边,这实际就是由亮到暗与由暗到亮的区别,也就是边缘的过渡.还能了解到其他类型的边缘检测以及如何去实现这些算 ...

  8. UE4打包后的游戏,无法打卡其他关卡的解决办法

    现象: 程序调试的时候可以通过主菜单打开其他关卡界面,但是打包之后就无法通过按钮打开,一直显示错误 Warning: Travel Failure: [ClientTravelFailure]: Fa ...

  9. 秒懂全文:盘点13个各具特色的AI智能阅读助手工具

    在当今信息爆炸的时代,AI阅读工具正在革新我们的阅读方式,成为了提高效率.优化阅读体验的关键. 这类AI阅读辅助工具,只需要上传文件或者输入链接,便可以直接以聊天对话的形式进行一键总结和智能问答,满足 ...

  10. Wetab 标签页:内置多种免费实用优雅小组件的浏览器主页和起始页

    Wetab 是什么? Wetab 是一款基于浏览器的新标签页产品,主张辅助用户打造一个兼具效率与美观的主页. Wetab 的核心特色便是内置了多种实用.优雅的小组件. 今天这篇,主要按照分类详细介绍  ...