首页 > 其他分享 >(十九)指针与迭代器

(十九)指针与迭代器

时间:2024-07-06 18:28:01浏览次数:18  
标签:变量 迭代 int 十九 定义 Typ 指针

前言

本来这次我想写关于进制的帖子的,但是感觉指针在为后面的很多内容做铺垫,所以我先把关于指针的帖子写了。况且我知道有很多小伙伴现在没有学习指针,点个赞吧,求求啦!


正文

指针

还记得我们定义普通变量的时候用的是Typ Var = Val; ,而指针在之前我们讲过,分别出现在这两个帖子里面:
(十八)排序
(十三)动态字符串
*还熟悉吗?它能把指针的值找出来,而它有一个“死对头”,那就是&,因为&是将变量转换为指针
因为*要把指针的值找出来,所以定义指针变量是这种方式:

Typ* p = &n; //让指针变量p指向变量n

不知道大家在别人写的代码中有没有见到new关键字,如果见到过,你会发现new的后面跟上了一个变量名,是的,new定义是这样的

Typ *p = new Vtyp; //让指针变量p做Vtyp的工作
Typ *p = new Atyp[N]; //让指针变量p做共N项的Atyp的工作

有的时候我们想暂时不定义指针指向的值,我们可以使用关键字nullptrnull的意思是“无效的”,而ptr的全写是pointer,它的意思是“指针,指”,因此这个关键字的意思就是“无效的指针”

Typ *p = nullptr; //定义指针变量,暂时不指向变量

有一种指针,叫二维指针,它可以实现一维数组的操作,又怎么定义呢?

Typ *p[N]; //定义一个共N项的整型数据的指针所组成的数组
Typ (*p)[N]; //定义一个共N项的指向整型数据组成的数组的指针
Typ **p; //定义一个指向由指针组成的数组的指针

被指了的变量会随着指针的值而变化

在定义后,怎么调整值呢?

*p = &n; //让指针p指向n
*p = Val; //赋指针p的值为Val
p[n] = Val; //赋p[n]的值为Val

又如何调用值呢?

*p //返回p所指向的值
p //返回p所指向的地址
p[n] //返回p[n]的值

在使用指针时,我们要注意不要使用野指针(越界指针),否则会RE或者错误输出
另外,指针变量是可以删除的

这是一个指针的实例,以前我们读入数组的方法是这样的

#include <iostream>
using namespace std; 
int main () {
	int n; 
	cin >> n; 
	int a[n]; 
	for(int i=0; i<n; i++) 
		cin >> a[i]; 
	for(int i=0; i<n; i++) 
		cout << a[i] << ' ';  
	return 0; 
}

现在读入又应该怎么整呢?

#include <iostream>
using namespace std; 
int main () {
	int n; 
	cin >> n; 
	int* a = new int[n]; 
	for(int i=0; i<n; i++) 
		cin >> a[i]; 
	for(int i=0; i<n; i++) 
		cout << a[i] << ' '; 
	return 0; 
}

迭代器

#include <iostream>
using namespace std; 
int main () {
	int n; 
	cin >> n; 
	int a[n]; 
	for(int* it=a; it!=a+n; it++) 
		cin >> *it; 
	for(int* it=a; it!=a+n; it++) 
		cout << *it << ' '; 
	return 0; 
}

可以看到上面的方法有着一个遍历变量it,它的全写是iterator,意思是迭代器。迭代器如何定义呢?首先,我们要找到数组的起始迭代器(见上一篇帖子),随后使用it++进行递增。就像这样

int a[3] = {8, 3, 6}; 
int* it = a; 
cout << *it << endl; //输出8
it ++; 
cout << *(it++) << endl; //输出3
cout << *it << endl; //输出6

另外,我们可以用for循环遍历迭代器,迭代器只有==!=两种判断运算!

int a[5] = {1, 5, 6, 3, 2}; 
for(int* it=a; it!=a+n; it++) {
	cout << *it << ' '; 
}
/*输出:1 5 6 3 2 */

请添加图片描述

标签:变量,迭代,int,十九,定义,Typ,指针
From: https://blog.csdn.net/2401_85898378/article/details/140223385

相关文章

  • 那些日子 十九
    爷不干了,这样的破职场,我看着就很头痒,也许同样这是一个两个三个四个,等等……打工人现状。项目太多太忙,又或是太急太仓……促,我只想问有没一位果断组长。他穿着新衣裳,又聊着小姑娘,在一天的8小时里,姿态保持着葛优躺。天气40多度,工人烈日忙碌,一片一片的汗水湿透整件衣裳。在某天......
  • 力扣-283移动零-双指针
    力扣-283移动零-双指针—、题目解析二、解题思路三、代码实现—、题目解析给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]二、......
  • 第18节 指针与数组
    文章目录第18节指针与数组1.一维数组与指针2.指针与字符串第18节指针与数组1.一维数组与指针►C++程序员更偏爱使用指针来访问数组元素,这样做的好处是运行效率高、写法简洁。►1.一维数组的地址 ►数组由若干个元素组成,每个元素都有相应的地址,通过......
  • 第19节 指针与函数
    文章目录第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数2、数组作为函数的参数2.引用和指向函数的指针3、引用4、指向函数的指针第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数►指针最重要的应用是作为函数参数,它使得被调函数......
  • 【leetcode】双指针算法题
    文章目录1.算法思想2.移动零3.复写零方法一方法二4.快乐数5.盛水最多的容器方法一(暴力求解)方法二(左右指针)6.有效三角形的个数方法一(暴力求解)方法二(左右指针)7.两数之和8.三数之和9.四数之和1.算法思想常见的双指针有两种形式,⼀种是左右指针,⼀种是快慢指针。左右......
  • C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结
    C++结构体C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中的const的使用场景,以及结构体的案例。1.结构体的定义和使用结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。......
  • 函数指针 和 指针函数区别以及使用方法
    问题由来:typedefint(*UaBase_ComFunction)(void);UABASE_API(int)UaBase_RegisterComFunction(UaBase_ComFunctiona_pFunction);UABASE_API(int)UaBase_UnregisterComFunction(UaBase_ComFunctiona_pFunction);上述代码的作用:声明的一个函数指针(函数类型的指针),作为函数形......
  • const修饰指针变量和assert断言
    一.const修饰指针变量一般来说,const修饰指针变量,可以放在*的左边,也可以放在*的右边,两个表示方法的意义是不一样的。1.代码1——测试无const修饰的情况voidtest1(){ intn=10; intm=20; int*p=&n; *p=20;//1 p=&m;//2}在这个代码中1和2所在的语句均可以......
  • 迭代器和生成器
    1、迭代器定义:访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从第一个元素开始访问,直到所有元素被访问。运用的场景:迭代器是一个对象,它能够在遍历数据集合时按需生成值,而不是一次性将所有值存储在内存中。这使得迭代器特别适合处理大数据集合或者......
  • 函参中的双重指针
    在学习swap函数时,若想改变实参,可以将函参设置为指针类型。那么函参中的双重指针,也是这种含义。即想改变实参(指针类型)的指向或值时,可以用双重指针。若只是想改变值,可以使用单指针。voidchange(char*p){p="bbb";}intmain(){char*v="aaa";change(v......