5.C++之指针

5-C++ 指针与智能指针 自动管理资源的生命周期。 阅读详情

学习目标:

1.掌握指针定义与用法
2.const修饰指针的三种情况
3.指针与数组
4.指针与函数
5.综合示例

学习内容:

1.掌握指针定义与用法

通过指针可以间接的访问内存;内存编号是从0开始的,一般用十六进制数字表示;可以利用指针变量保持地址
语法:数据类型 *指针变量名
例如:

int a = 18;		//定义一个整型
int *p;		//定义一个指针,其变量名为p
p = &a;		//由于p是一个指针, 接收a的地址
2.const修饰指针的三种情况
  • const 修饰指针(常量指针)
  • const 修饰常量(指针常量)
  • const既修饰指针,又修饰常量

const 修饰指针(常量指针)
常量指针:指针指向的值不能修改,指针的指向可以修改

int a = 10;
int b = 20;
const int *p = &a;//const修饰指针
*p = 20;//*p表示取值,先前为10,修改为20,数值发生变化,这种情况是错误的
 p = &b;// p表示指针,表示指针的指向变化,这是允许的

const 修饰常量(指针常量)
指针常量:指针指向的值能修改,指针的指向不可以修改

int a = 10;
int b = 20;
int * const p = &a;//const修饰常量
*p = 20;//*p表示取值,先前为10,修改为20,数值发生变化,在指针常量中这种情况是允许的
 p = &b;// p表示指针,表示指针的指向变化,不允许

const既修饰指针,又修饰常量:指针的指向和指向的值都不能改变

3.指针与数组

通过地址偏移来表示指针

#include<iostream>
using namespace std;
int main()
{
	int arr[6] = { 1, 2,3,4,5,6 };
	int* p;
	p = arr;//数组名表示首地址
	cout << "利用指针访问第一个元素为:" << *p << endl;
	p++;//让指针向后偏移4个字节
	cout << "利用指针访问第二个元素为:" << *p << endl;
	system("pause");
	return 0;
}

在这里插入图片描述
通过指针来循环数组中所有的元素

#include<iostream>
using namespace std;
int main()
{
	int arr[6] = { 1, 2,3,4,5,6 };
	int* p;
	p = arr;//数组名表示首地址
	//for循环6次,表示要进行6次取值
	for (int i = 0; i < 6; i++)
	{
		cout << *p << endl;
		p++;//发生地址偏移
	}
	system("pause");
	return 0;
}

在这里插入图片描述

4.指针与函数

利用指针作为函数的参数,可以改变实参的值(地址传递)

#include<iostream>
using namespace std;
void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << "定义交换函数中数值情况为:" << endl;
	cout << "a = " << *a << " b = " << *b << endl;
}
int main()
{
	int a = 10;
	int b = 20;
	cout << "打印前主函数中的数值:"<<endl;
	cout << "a = " << a << " b = " << b << endl;
	cout << "****^^^^****" << endl;
	swap(&a, &b);//传入相对应的地址,所以在定义函数时要定义指针来接收
	cout << "****^^^^****" << endl;
	cout << "打印后主函数中的数值:" << endl;
	cout << "a = " << a << " b = " << b << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

5.综合示例

案例描述:利用指针传值来完成冒泡排序,用两个分函数分别实现对应的功能:一个是排序,另一个是打印输出

#include<iostream>
using namespace std;
void BubbleSort(int* arr, int len);//将声明放在主函数前,那么函数体就可以放在主函数后面
void PrintSort(int* arr, int len);
int main()
{
	int arr[6] = { 2,98,86,36,25,1 };
	int len = sizeof(arr) / sizeof(int);
	cout << "打印原有数组:" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << "   ";
	}
	BubbleSort(arr, len);//数组名表示地址,传入地址要用指针接收
	cout << endl;
	PrintSort(arr,len);
	cout << "打印排序后的数组:" << endl;
	system("pause");
	return 0;
}
void BubbleSort(int* arr, int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
void PrintSort(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << *arr << "   ";//通过地址偏移来完成打印输出
		arr++;
	}
}

在这里插入图片描述


【C++】3-1.5 c++空指针 【C++】3-1.5 c++空指针1.运行环境2.空指针二级目录三级目录 1.运行环境 操作系统:windows10 使用的IDE:visual studio comunity 2019 编译器标准:ISO C++17 标准 (std:c++17) 2.空指针 C++03中,空指针使用“0”来表示。0既是一个常量整数,也是一个常量空指针。即会出现:0具有二义性; 在C语言中,空指针使用(void *)0来表示;在c++中用“NULL”来表示空指针(VS内部实现方式是#define NULL 0) 如下图1 阅读详情

相关推荐

深入分析RAG知识库多模态数据预处理

多模态企业数据预处理是构建高质量RAG知识库的关键环节。本文详解了处理流程:1)文档格式识别与路由;2)多模态内容提取(文本、图像、音视频);3)结构解析与语义重建;4)数据清洗与增强;5)智能分块(强调语义完整性);6)元数据注入。推荐使用开源工具如PaddleOCR、Whisper、BLIP-2等,或商业API处理复杂场景,最终生成带丰富元数据的结构化内容,为后续向量化检索奠定基础。

qq_35354529的博客 1379

c/c++:指针,指针定义和使用,指针大小4字节,野指针,空指针*p=NULL

c/c++:指针,指针定义和使用,指针大小4字节,野指针,空指针*p=NULL

weixin_46838716的博客 1337

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

C++指针详解

打人犯法吗,犯法;一定会近派出所吗,不一定;

qq_42757463的博客 1190

03.Linux下目录动态扩容,以分配home的部分空间给root为例

本篇文章将介绍Linux下分配home目录的部分空间给root目录。大致思路:卸载home,解除其磁盘容量占用->扩容root,增加其磁盘空间->重建恢复home操作演示环境为CentOS系统,其他操作系统例如openEuler也可作为参考。01.Linux下目录扩容,以增加root目录的磁盘容量分配为例操作系统版本如下名称版本CentOS7.6+

ChennyWJS的博客 2337

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1805

C/C++中指针所能指向的地址范围

//指针变量在32位操作系统下所占字节数是4,计算得出其所能寻址的范围大小是4GB,与32操作系统所能寻址范围一样大,足够用了;64位系统下指针变量所占字节数变为8,也够用。 #include int main(void) { double t = 1; double sum; for (int j=1; j<=32; ++j) { t *= 2; } sum = t

九月飞雪的博客 2863

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

C/C++ 指针变量大小

它的大小与操作系统和编译器有关。具体来说,指针变量的大小通常为4字节或8字节,取决于操作系统和编译器的位数。在32位的操作系统上,指针变量的大小通常为4字节;在64位的操作系统上,指针变量的大小通常为8字节。,因此一个指针变量需要4字节来存储地址。而64位操作系统的地址总线宽度为64位,这是因为32位操作系统的地址总线宽度为32位,,因此一个指针变量需要8字节来存储地址。需要注意的是,指针变量的大小。,而与指向的对象类型无关。

Aheaboy的博客 2563

yolov7模型部署流程

yolov7部署流程

算法的猫 1396

【Segment Anything Model】十(1):利用SAM做分类任务,方法二,不放过SAM强大特征提取能力,将SAM提取到的ImageEmbedding插入到其他cnn网络中

直接黏贴复制就好'''该类定义了VGG-16的基本结构。features: 代表VGG网络的主体部分,即所有的卷积层和池化层。avgpool: 是自适应平均池化层,将特征图大小调整为7x7。classifier: 是VGG网络的分类部分,由全连接层组成。_initialize_weights(): 初始化权重的方法。

cvxiayixiao的博客 3562

C++的指针

C++的指针 在C++中,指针被称为是C/C++中的精髓所在,指针是存放内存地址的一种变量,特殊的地方就在它存放的是内存地址。 计算机中的内存都是编址的,每个地址都有一个符号。指针是一个无符号整数,它是一个以当前系统寻址范围为取值范围的整数,声明指针和声明一个无符号整数实质上并无区别。 一、变量内存实质 (一)变量的实质 要理解指针,首先就要理解“变量”存储实质,内存空间图: 根据...

King逍灬遥 1023

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1718

【UE5 C++课程系列笔记】21——弱指针的简单使用

目录:概念、声明和初始化、转换为共享指针、打破循环引用、弱指针使用警告

ChaoChao66666的博客 1719

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于C/C++指针的5大问题

本文概述了关于StAccOffFuff.com上C/C++指针的主要问题。指针是C/C++中最令人困惑的部分,这些问题用简单的例子来解释关键指针概念。 1.不使用循环从1到1000计数 #include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&main + (&amp...

qq_42289041的博客 208

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GetQzonehistory:把十年QQ空间历史说说完整导出,Excel和网页一次拿全

GetQzonehistory 是一个本地运行的 Python 小工具,用来把你 QQ 空间发过的历史说说完整抓取下来,导出成 Excel 表格和一个还原空间样式的网页文件,长期存在自己的硬盘里。适合说说发得多、想把这些旧记录完整存档的人。 ## 先说结果:跑完之后你会得到什么 程序跑完后会自动打开 `resource/result/你的QQ号/` 这个文件夹,里面是一套完整的东西: | 产

gitblog_00301的博客 631

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++——指针5

8.2指向类的静态成员的指针 对类的静态成员的访问不依赖于对象,可以用普通的指针来指向和访问。 //通过指针访问类的静态数据成员 #include <iostream> using namespace std; class Point //Point类声明 { public://外部接口 Point(int xx=0, ...

dashen2259的博客 175

C++目录

C++目录 C++笔记目录Dev-cpp5.4.0安装及下载C++_000-标准C++_001-基本知识C++_002-编写个加法程序C++_003-字符和字符串C++_004-大小写字母转换C++_005-putchar函数C++_006-getchar函数C++_007-puts的函数C++_008-gets的函数C++_009-setw、setfill操作符与left、rightC++_01...

cloud 1724

C++5(指针)

指针 代码示例 #include<iostream> using namespace std; int main() { //定义一个指针:1.创建变量 2.创建指针 3.建立关系 int a = 10; //指针定义语法:数据类型 *指针变量名; int * p;//也可 int *p = &a; //让指针变量记录a的变量地址 p = &a; cout << "a的地址为" << &a << endl; cou

Tsang11的博客 371

【UE5 C++初学笔记】 03.智能指针

U++智能指针分为四类:共享指针(TSharedPtr)、共享引用(TSharedRef)、弱指针(TWeakPtr(TSharedRef))、唯一指针(TUniquePtr)关于智能指针的理解:虚幻引擎的共享指针不用于指向UObject,UObject管理有专属的垃圾回收机制。智能指针中,主要是用来延长对象的生命周期,让其在有被引用的时候存在,不被引用的时候就销毁,可为空;

2401_88956801的博客 609

5、c++指针

int a=10;int *p;p=&a;

qq_45193988的博客 453

C++学习日记 | Lecture 5 指针

资料来源:南科大 于仕琪 C/C++ Program Design

电子异术博物馆 1046

C++基础知识【5】数组和指针

数组是一组具有相同数据类型的元素的集合,可以通过一个名称和一个索引来引用其中的元素。在声明数组时,必须指定数组的大小,这个大小在声明时是固定的,无法改变。数组的元素可以是任何C++数据类型,例如int,double,char等。数组名代表数组的第一个元素的地址,也称为指向数组的指针。数组元素可以使用下标运算符[]访问,下标从0开始计数。

从此不归路 3016

指针——《C++ Primer 5》

指针!终于让我领悟到了一丢丢!!太激动了所以赶快写下来!p :一个变量,如1,2...&p:取变量p的地址,如0XA0,0Xeff14*p:定义一个指针。

qq_62767376的博客 128

GESP C++四级指针通关秘籍:从定义到解引用的5个实战练习

本文针对GESP C++四级考试中的指针难点,提供了从定义、取址、解引用到实战应用的五步通关秘籍。通过五个循序渐进的实战练习,结合生动的“房卡”比喻,帮助考生彻底理解指针与地址的关系,掌握通过指针修改函数参数、遍历数组等核心操作,从而扎实应对GESP考试大纲中的相关考点。

weixin_29204205的博客 342

C++——用指向指针的指针的方法对5个字符串排序并输出。

int main()i<5;i++)i<5;i++)p=pstr;sort(p);i<5;i++)return 0;char *temp;i<5;i++)j<5;j++)

2303_80770781的博客 429
上一篇: 4.C++之函数
下一篇: 6.C++之结构体
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值