C++总结笔记(二)——指针

一、概念

1.1 指针的原理

找到一个比较精练的概述指针原理的句子:
指针变量就是在内存中保存变量的地址,然后通过地址来访问数据。

int a = 1;
int* p = &a;
cout << p << endl;
009DFEB4

可以知道变量p在内存中的值就是a的地址,地址一般是16进制数。
然后我们可以通过解引用的方式来输出a的值。所谓解引用,就是通过指针的值即a的地址来找到a的值,具体方法就是在指针变量前加*。

cout << *p << endl;

可以知道,*p的值为1。

1.2 常量修饰指针

常量修饰指针分为常量指针、指针常量、常量指针和指针常量叠加。

1.2.1常量指针

常量指针通过const关键字修饰指针。
它的特点是指针变量指向的值不可以进行修改,但指向可以修改。

int a = 1;
int b = 2;
const int* p = &a;
*p = 2;//错误
p = &b;//正确
cout << *p << endl;

可以知道,*p的值为2。

1.2.2指针常量

指针常量是通过const来修饰指针变量p
它的特点是指向的值可以进行修改,但指向不可以修改。

int a = 1;
int b = 2;int* const p = &a;
cout << *p << endl;
cout << p << endl;
//p = &b;错误
*p = 2;//正确
cout << *p << endl;
cout << p << endl;
1
0102FBE0
2
0102FBE0

可以看到,指针的值即指向的地址没有改变,其指向的值发生变化。

1.2.3常量指针和指针常量叠加

那const也可以既修饰指针又修饰指针变量的值,那么指向的值不可以进行修改,指向即地址也不可以修改。

const int* const p = &a;

其实简单的总结:const后面的值不能发生改变

1.3 野指针

野指针是指指向非法的内存空间的指针。
1.指定义指针时未做初始化,因而不明确所指向的位置。

int * c = (int*)0x1234;//给指针自定义地址名,没有初始化,会变成野指针
int*  d;//没有初始化,也为野指针

2.指new赋值的指针释放后没有归NULL

	int* e = new int(1);cout << *e << endl;//只有指针b是正常的,现在将b释放,也会发生报错if(e != NULL){delete e;//此时e为野指针,需要将e置为NULLe = NULL;}

3.指针操作超越了作用域

1.4 this指针

C++中this指针指向的是被调用的成员函数所属的对象。

class Person
{
public:Person(int age){this->age = age;}int age;
};

1.5 空指针

是指指针指向内存编号为0的空间,相当于初始化,不可以访问。

int *p = NULL;

二、程序应用

2.1 在数组中应用指针

2.1.1 一维数组

我们发现数组的变量名其实就是地址,所以不需要用&来取地址。

	int a[3] = {1, 2, 3};int* p = a;//p表示数组a中第一个元素的地址,p[0]则表示地址中的值即1。cout<<a<<endl;cout<<p[0]<<endl;for (int i = 0; i < 3; i++){cout << *p << endl;p++;//++相当于从首地址依次加4个字节到下一个数组元素的地址}

2.1.2 二维数组

int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
cout << a << endl;
int* p = a[0];//指向第0行。
int* p1 = a;//错误,二维数组的数组名表示的是第一个元素的地址,第一个元素是值数组的第0行,
所以不能指向整行,只能指向整行的元素。
cout << *p << endl;//也表示0行的第一个元素。
cout << p[0] << endl;//表示0行的第一个元素。
00B1FA0C
1
1
3

2.2 在函数中应用指针

int delete_1(int* p1, int* p2)
{int temp = *p1;*p1 = *p2;*p2 = temp;return *p1 - *p2;
}
int main()
{int a = 1;int b = 2;int c = delete_1(&a, &b);cout << a << endl;cout << b << endl;cout << c << endl;
}
2
1
1

与值传递不同,指针传递可以通过改变内存中的值的方法来改变实参。

2.3 实现冒泡排序

void Sort(int* p, int len)
{//实现冒泡排序for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - i - 1; j++){if (p[j] > p[j + 1]){int temp = p[j];p[j] = p[j + 1];p[j + 1] = temp;}}		}	//交换int var = p[0];p[0] = p[2];p[2] = var;//输出for (int k = 0; k < len; k++){cout << p[k];}
}
int main()
{int a[5] = {13, 1, 2, 5, 14};int len = sizeof(a) / sizeof(a[0]);Sort(a, len);
}
5211314

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag转载于:https://www.cnblogs.com/zhujiabin/p/5085688.html

【图像处理】——图像内插法

参考:https://blog.csdn.net/lovexlsforever/article/details/79508602 cv2.resize函数 當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,當我們放大影像,CV_INTER_CUBIC會有最好的效果 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, dou…

while read line 用法详细介绍

循环中的重定向 或许你应该在其他脚本中见过下面的这种写法&#xff1a; while read line do … done < file 刚开始看到这种结构时&#xff0c;很难理解< file是如何与循环配合在一起工作的。因为循环内有很多条命令&#xff0c;而我们之前接触的重定向都是为一条命令工…

C++总结笔记(三)—— 结构体

一、概念 结构体是一种可以自定义数据类型的类型格式&#xff0c;一般用struct关键字进行定义。 //创建食物的结构体 struct Food {//属性名string name; //名字int Price; //价格 };结构体有三种定义变量的方法。 1.1 定义结构体后再声明变量&#xff0c;然后在对变量的…

[轻微]WEB服务器启用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等协议访问应用程序/tomcat下禁用不安全的http方法...

使用了360网站安全检测 查到有OPTIONS方法 百度了下 https://my.oschina.net/maliang0130/blog/338725 找到这个方法奈何http.conf 找不到无论在tomcat目录里还是linux路径下的/usr/etc或者apache2 最后通过开源中国找到 第一步&#xff1a;修改应用程序的web.xml文件的协议 &l…

MVC 事物同时保存,更新数据库

本人小白一枚&#xff0c;第一次写博&#xff0c;主要用作笔记&#xff0c;怕以后忘记了&#xff0c;大神尙可路过&#xff0c;也可多多指教 事物用在同时保存更新数据时&#xff0c;及只要在事物块的范围内&#xff0c;有一个操作出错则事物块所有更新&#xff0c;保存等操作都…

【图像处理】——正装照换底色Python

import cv2 import numpy as np # 读取照片 img=cv2.imread("personalPic.jpg")# 图像缩放 img = cv2.resize(img,None,fx=0.3,fy=0.3) rows,cols,channels = img.shape print(rows,cols,channels)# img_medianBlur=cv2.medianBlur(img,3) # 中值滤波,必须是大于1的奇…

Halcon例程详解(植物测量) —— measure_plant.hdev

文章目录 前言一、过程1.1 筛选ROI区域1.2 分割1.3 三维建模与仿射变换1.4 确定叶子的角度分布和高度1.5 确定叶子的面积和树干的直径1.6 对叶子的角度进行分析二、例程详解2.1 筛选ROI区域2.2 分割2.3 三维建模与仿射变换2.4 确定叶子的角度和高度2.5 确定叶子的面积和树干的直…

keil5中文乱码的解决

keil5 复制出来的中文显示乱码&#xff0c;该如何解决&#xff1f; 点击Edit - Configuration &#xff0c;进入编辑器设置&#xff1a; 点击ok &#xff0c;就可以了转载于:https://www.cnblogs.com/alan666/p/8312100.html

spark RDD iterator中sparkEnv功能 -- (视频笔记)

sparkEnv是spark环境变量 1、可以从其中get 缓存 2、为master workder driver 管理和保存运行时对象。 3、excutorid &#xff0c;excutor 一种为driver类型&#xff0c;一种具体处理task 内部有线程池的excutor 4、actorSystem &#xff0c;如果运行在driver 则为spark driver…

【图像处理】——Python实现几何变换(自定义+opencv库)

理论知识:参考https://blog.csdn.net/on2way/article/details/40460675 Python调用opencv函数参考:https://blog.csdn.net/on2way/article/details/46801063 一、引自《数字图像处理》的基础知识汇总 这个很重要!!!这里需要注意的是反向映射和前向映射的区别,反…

Go语言学习资料整理

整理网上找到的Golang语言学习资料基础基础教程 书籍在线版Go 指南-A Tour of GoGo语言圣经&#xff08;中文版&#xff09;Effective Go中文版Go Web编程 build-web-application-with-golangGo入门指南 The Way to Go《The Way to Go》中文译本&#xff0c;中文正式名《Go入门…

C++总结笔记(四)—— 堆栈区域划分与引用实例解析

文章目录前言&#x1f600;一、概念1.1. 内存分区1.1.1 堆区1.1.2 栈区1.1.3 程序代码区1.1.4 全局/静态存储区1.1.5 常量存储区1.2. 引用二、程序示例总结前言&#x1f600; 在C的内存管理中&#xff0c;堆区和栈区是一个非常重要的概念&#xff0c;理解堆栈的相关知识&#…

学习Android MediaPlayer

Android Media Playback 原文 The Android multimedia framework includes support for playing variety of common media types, so that you can easily integrate audio, video and images into your applications. You can play audio or video from media files stored in…

spark2.0.1 安装配置

1. 官网下载 wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz 2. 解压 tar -zxvf spark-2.0.1-bin-hadoop2.7.tgz ln -s spark-2.0.1-bin-hadoop2.7 spark2 3. 环境变量 vi /etc/profile #Spark 2.0.1export SPARK_HOME/usr/local/spark2export PATH…

Spring Cloud各组件超时

Ribbon的超时 全局设置&#xff1a; ribbon:ReadTimeout: 60000ConnectTimeout: 60000局部设置&#xff1a; service-id:ribbon:ReadTimeout: 1000ConnectTimeout: 1000其中&#xff0c;service-id 是Ribbon所使用的虚拟主机名&#xff0c;一般和Eureka Server上注册的服务名称…

【图像处理】——遍历图像所有像素的方法(for 循环和np.where遍历)应用在模板制作

目录 具体np.where的用法可以参见: 其他遍历图像的所有像素的方法: 模板制作流程 Python代码

C++总结笔记(五)——构造函数和析构函数

文章目录前言一、基本概念1 构造函数2 析构函数二、示例1. 构造函数和析构函数的简单使用2. 拷贝构造函数的调用3. 浅拷贝和深拷贝前言 本文讲述了构造函数和析构函数的概念以及对应的示例&#xff0c;以便加深理解。 一、基本概念 1 构造函数 构造函数用于初始化类的对象&a…

LINUX 更新

sudo apt-get dist-upgrade,更新所有的软件转载于:https://www.cnblogs.com/jackieron/p/5997805.html

python实战===如何优雅的打飞机

这是一个打飞机的游戏&#xff0c;结构如下&#xff1a; 其中images中包含的素材为 命名为alien.png 命名为ship.png 游戏效果运行是这样的&#xff1a; 敌军&#xff0c;也就是体型稍微大点的&#xff0c;在上方左右移动&#xff0c;并且有规律向下移动。我军目标&#xff0c;…