C++指针详解(指针初始化与回收,常量与指针,引用与指针)

C++指针声明、初始化、基本操作和参数传递 这一系列文章用于记录技术小白在学习道路上遇到的那些坑,在刚开始接触C系列的编程语言的时候,相信很多人都对指针感到头疼,笔者也一样,第一次的从入门到放弃就出现在这里,时隔很久之后,决定好好学习一下,明知山有虎偏向虎山行。 1、声明和初始化指针 指针是一种变量,其值是一个内存地址。 形式如下: Type * pointerVariable; Type * pointerVariable = ad... 阅读详情

1、指针的定义初始化以及回收

指针是一个地址,这个地址内存放数据,这些数据就叫做“指针所指的数据”或者“指针指向的数据”。

指针类型存储的是被存储的数据的地址,即p的值是地址,*p 是p这个地址指向的值。

普通类型:

int main() {
	//空指针初始化
	int* p = nullptr;	//整型指针初始化

	p = new int(42);
	cout << "Before *P=" <<*p << endl;
	*p = 10;
	cout << "After *P=" << *p << endl;
	
	//回收指针
	delete p;
	return 0;
}
值类型
指针p0x00e0ffa8{10}int*
指针的间接引用*p10int
指针的地址&p0x00cffd34 {0x00e0ffa8 {10}}int**

数组类型:

int main() {
	//空指针初始化
	int* q{ nullptr };	//数组指针初始化

	q = new int[4];	//q存储的是数组首地址
	for (int i = 0; i < 4; i++) {
		cout << "Before *(q + i):" << *(q + i) << endl;
		*(q + i) = i;
	}
	for (int i = 0; i < 4; i++) {
		cout << "After *(q + i):" << *(q + i) << endl;
		*(q + i) = i;
	}
	cout << "-------------" << endl;
	cout << "*q:" << *q << endl;
	cout << "*q+2:" << *q+2 << endl;
	//回收指针
	delete[]q;
	return 0;
}

2、常量与指针

1)常量指针(常指针)

常量指针,即指向常量的指针,const在*前。
指向常量的指针必须也被声明为常量,即常量指针。
指针本身可以改变,但指针指向的常量不可改改变。

	const int x = 1;	//常量
	const int* y=&x;	//指向常量x的常量指针

下面的则是不被允许的

	const int x = 1;	//常量
	int* y=&x;	//这里会报错,因为指向常量的必须也声明为常量

常量指针,p可以更改,*p不可以更改

	const int x = 1;
	int z = 2;
	const int* y=&x;
	y = &z;	// 可以,指针本身可以改
	*y = z; // 不可以,指针指向的数据是常量,不能改
2)指针常量

指针的内容为常量,因为指针为常量类型,所以指针不能改变,但是指针指向的数据可以改变。

	int x = 2,z=3;
	int* const y = &x;
	*y = 3;	//可以,指针指向的数据是常量,可以改变
	y = &z; //不可以,指针本身是常量,不能改变
3)总结
  • 在前先读(*和const谁在前,谁先读)
  • const在谁前,谁不可变

3、引用与指针

一般来说,用到的都是指针类型的引用。
例:

	int* a = new int(10);
	int*& b = a;

b为指向a的int*类型的引用,即b为a的引用,类型为int指针类型。

值类型
a0x0149c208 {10}int*
b0x0149c208 {10}int*&
*a10int
*b10int
&a0x010ff7dc {0x0149c208 {10}}int**
&a0x010ff7dc {0x0149c208 {10}}int**

引用和指针的区别

引用指针
初始化定义时必须初始化可以定义空指针
是否可以更改一旦定义不可再更改,即成为a的引用后不能改为b的指针p和*p都可以更改
二重指针分配矩阵内存并初始化 首先要明白的是:int **a ;  a为(指向int类型的指针)的指针 METHOD 1: 先分配内存malloc 1.如果后面初始化赋值了,后面就不用了 2.如果后面没有赋值,需要memset了 如果说我临时需要一块内存,这块内存用来存储n个int的变量。我就需要使用malloc为pMax分配一块内存。可以这样做: pMax = malloc(sizeof(int) * n); 阅读详情

相关推荐

C++引用(变量引用、数组引用与数组指针、引用本质-指针常量、常量引用)

文章目录1 引用的基本用法2 引用注意事项3 引用做函数参数4 引用做函数返回值5 引用的本质6 常量引用 1 引用的基本用法 作用:为变量起别名。 语法:数据类型 &别名 = 原名; 示例: int main() { int a = 5; int &b = a; //引用:为变量起别名 cout << "a = " << a << endl; //5 cout << "b = " << b << endl;

NewsomTech 6569

c++ 指针的初始化

/ 初始化为 nullptr// 在 C++11 之前的代码中常见初始化为变量的地址。

淘气の小狼人的博客 2995

C++ 指针常量、常量指针、指向指针常量的引用等

文章目录指针常量、常量指针、指向指针常量的引用等指针常量与常量指针 指针常量、常量指针、指向指针常量的引用等 指针常量与常量指针 ###指针常量(辅助记忆,“指针是常量”) ...

weixin_39583140的博客 660

C++中的指针初始化

C++中定义一个指针的时候,例如 int *p。 可以认为定义了两个内容,1:指针,2:指针的指向。需要对指针本身和指针的指向都进行初始化,既要初始化内存地址,也要定义内存中的内容。如果不进行指针的初始化,则内存地址随机分配。格根据编译器的不同,会出现警告或者报错不同等级的问题,在编译中也可能出现难以察觉的bug。 指针的初始化时等号左右两端都必须是内存地址。例如 int a; int ...

kangshuangzhu的博客 2万+

【C++】引用详解——引用与指针的区别

文章目录1.引用概念举例2.引用特点举例3.常引用4.引用应用场景1.做参数2.使代码更加简洁化3.做返回值举例5.传值、传引用效率比较5.1参数举例结果5.2返回值举例结果6.指针和引用的共性传引用的汇编代码传地址的汇编代码7.指针和引用的不同 1.引用概念 类型名& 引用变量名(对象名)=引用实体; 引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会为引用变量开辟空间,他和他的引用共用同一块内存 举例 注意:引用类型必须和引用实体是同种和类型的 void Test() {

风铃的博客 1649

C++ 释放指针

C++中,释放指针通常使用delete或delete[]操作符;

bcbobo21cn的专栏 1851

C++ 引用详解(引用的特点,引用与指针的区别,引用的其他使用)

引用 引用的特点 引用与指针的区别 引用的一系列使用

Mi-ronin的博客 3万+

C++ 类内引用和 `const` 初始化详解

引用成员:必须在构造函数的初始化列表中初始化,并且一旦初始化后不能改变引用的对象。常量成员:必须在构造函数的初始化列表中进行初始化,且不能修改。常量引用成员:可以绑定到一个对象,并保证不会修改该对象的值。理解和正确使用类内的引用和const初始化是 C++ 编程的一个基础技能,能够帮助我们编写更高效、更加安全的代码。希望这篇文章对你有帮助!如果你有任何问题,随时来问我哦!📚。

m0_62599305的博客 1189

C++ 辨析常量指针、指针常量与常量引用、引用常量

1.常量指针与指针常量的区分 A、常量指针(const int* p) 常量指针本质上是一个指针,是一个指向“常量”的指针,即不能通过指针改变指向对象的值(不能解除引用),但可以更改指向。用法如下 int a=3,b=4; const int *p=&a; /初始化指向a p=&b; /可以更改指向,现在指向b *p=5; /不可以通过指针改变对象的值 B、指针常量(int* const p) 指针常量本质上是一个常量,const是修饰p的,即指针的值自身是一个常量,不可改变,始

weixin_43335392的博客 3174

windows10下Boost的安装与初试

https://blog.youkuaiyun.com/s_lisheng/article/details/72871218 https://blog.youkuaiyun.com/yockie/article/details/8856190?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.vipsorttest&depth_1-utm_source=dis

焦露的博客 6396

高精度SAR ADC设计实战:从建模到版图的16位1MSPS实现

本文详细介绍了16位1MSPS高精度SAR ADC的设计过程,从建模到版图实现的完整流程。重点探讨了分段电容阵列设计、校准算法实现及版图匹配等关键技术,展示了如何在180nm工艺下实现92.5dB SNDR和109.6dB SFDR的高性能指标。文章特别强调了整数桥接电容设计对提升匹配精度的关键作用,为高精度模数转换器设计提供了实用参考。

weixin_33724046的博客 437

【C/C++】指针常量、常量指针分不清?竟还能这样记!

文章目录名字记忆 名字记忆

K。的博客 3954

自适应陷波器的原理与实现

x(t)是叠加有两个频率干扰信号的输入信号,s(t)是需要保留的有用信号,在输入信号中,我们只知道频率w1和w2,但不知道信号的幅度A和相位θ,自适应陷波器可以估计两个未知的幅度和相位值,这需要我们提供两路相互正交的单频信号,如cos(w1t)、sin(w1t),通过调整其权值,从而合成出与干扰信号完全相同的信号A1cos(w1t+θ1),从而实现干扰信号的滤除。采用LMS算法,在保证不损失其他有用信号的情况下,有效地抑制输入信号中某一频率的干扰,如需滤除多个频率,只需要增加相应的输入信号。

Melkiades2333的博客 6889

C++常量详解(一)常量指针与常量引用的初始化

1、常量 1.1、常量的初始化: const对象一旦创建后其值就不能再改变,所以const对象必须初始化。这里我们要注意一点,像const int *p和const int &r都并不是const对象。因为const int *p只是表示不能通过p改变p所指的对象的值,p的值是可以变的,所以p可以不用初始化。至于r ,引用本身就不是对象,所以r也并不是const对象,r之所以一定初始

Jang1996的博客 3427

WPS集成DeepSeek最新教程,附详细图文,让文案生成更智能

本文将为大家详细介绍如何将 DeepSeek 功能集成到 WPS 中,通过 OfficeAI 插件,你无需进行复杂的本地部署,只需通过官网连接即可快速启用 DeepSeek 强大的 AI 功能。不论是文案生成、翻译校对,还是深度推理、决策支持,DeepSeek 都能为你提供便捷的解决方案。让我们一起来看看如何操作吧!

Java徐师兄的博客 6万+

DDPG算法实战:用Python一步步实现深度强化学习中的连续动作控制

本文详细介绍了DDPG算法在深度强化学习中的连续动作控制应用,通过Python和PyTorch实现从零构建智能体。内容涵盖环境搭建、网络架构设计、经验回放、OU噪声实现及训练流程优化,帮助开发者掌握DDPG在机械臂控制等场景的核心技术。

weixin_30335575的博客 416

C++:指向常量的指针,常量指针,指向常量的常量指针:初始化区别 以及const的引用情况

指针类型的初始化或赋值,(不存在特例的情况下)对象类型都应该严格匹配 如下的初始化是或的关系,每次只存在一个初始化,因为方便比较 指向常量的指针可以初始化被同类型的常量和同类型非常量,因为是一个指针的特列,可以指向同类型非常量如下: int i = 42; const int h = 0; double x = 3.0; const int *b =&i ;//正确 c...

weixin_43345725的博客 3779

【SCADA】KingSCADA将数据插入SQLServer的方法

1、创建数据库及数据表格;2、配置ODBC数据源。3、通过KingSCADA与数据库建立连接,将数据写入数据库对应表格。

做有价值的事,积累有价值的笔记! 4961

C++ Primer:常量引用、引用常量、常量指针、指针常量

常量引用:绑定常量的引用。 const int ci = 1; const int &r = ci; r = 2;//错误,r不可修改 引用常量:不存在引用常量的说法。 int i = 1; int &const r = i;//错误 3. 常量指针:指向常量的指针。 const int i = 1; const int *p1; int const *p2;//...

北冥有鱼wyh的博客 1578

【YOLOv11改进[Backbone]】 使用Ghostnetv2替换Backbone

使用Ghostnetv2替换Backbone

静谧、淡雅 518

YOLOv11-seg改进系列 | 引入CVPR2022 MetaFormer,零参数池化Token混合+StarReLU MLP,精度涨不掉速

本文提出了一种改进YOLOv11分割任务的C3k2_PoolingFormer模块,通过引入MetaFormer架构和Pooling Token Mixer,在保持模型轻量化的同时增强全局感受野建模能力。核心创新包括:1)使用零参数的AvgPool3×3差值作为Token Mixer,实现高效邻域信息聚合和局部对比增强;2)采用StarReLU MLP替代传统激活函数,提升非线性表达能力。改进后模型仅增加6.1%参数量,却能显著提升分割精度,特别适用于需要长程依赖建模的实例分割任务。该设计为轻量级视觉模型提

qq_44224801的博客 434

搬砖:C++ 指针常量、常量指针和常指针常量

C++ 指针常量、常量指针和常指针常量 2014年11月26日 22:12:41 To-Big_Fish 阅读数:4324 https://blog.youkuaiyun.com/yujin753/article/details/41523005 1、指针常量 如果在定义指针变量时候,指针变量前用const修饰,被定义的指针变量就变成了一个指针类型的常变量,指针类型的常变量简称为指针常量。 格式如下...

hunter 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++中常量、引用、指针、常量指针、指针常量、常量引用、顶层常量与底层常量

主要问题 哪个是指针不能变? 哪个是指针指向的对象不能变? 常量 常量const是constant的缩写,本意是不变的,不易改变的意思。const在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 加了const修饰的变量,一经定义值永远不能改变。通常我们用在一些定值的声明定义上,比如某缓冲区的大小、某个最大值最小值等等。 const float MaxLenth = 100.0f; 如果你试图在声明定义以外的范围内修改该变量的值,是不被允许的,通常编译器就会检查出错误。 举

呆呆象呆呆的博客 1182

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

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

C++ 常量指针、指针常量、引用的区别

前言: 在C语言中,"&“表示取地址。在C++中,”&"不仅表示取地址,还可以表示引用,但是与指针有所差异。要理解它们的差别,需要先掌握指针、常量指针、指针常量的概念。 1.指针 指针的本质也就是变量: 它不仅有自己的地址,也有它所存放的值,只不过这个值是地址而已。 int a = 10; int *p = &a; //指针变量p:也即是变量p中存放的是变量a的地址(指...

Boooooots的博客 1344

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

指针常量、常量指针和引用(本质是 *const)This的理解

在面试中我们经常会被面试官问到什么是常量指针,什么又是指针常量。可能第一次被问到都会有些懵逼(大神略过)。我今天就来讲一讲这二者的区别。 下面开始正题。。。。 指针常量 指针常量:顾名思义它就是一个常量,但是是指针修饰的。 格式为: int * const p //指针常量 在这个例子下定义以下代码: int a,b; int * const p=&a //指针常量 /...

Hello,小高同学 5264

C++ 常量指针、指针常量、引用和常引用的用法解析

今天学习C++的常量类型和引用,其中常量指针、指针常量、引用和常引用几个概念较为接近,特地整理一下。 1.常量指针(pointer to const) 常量指针,顾名思义,是指向常量的指针,其定义的一般形式为:const T * pointer_name =&target; T为数据类型,target为T类数据。 常量指针本身是可变量,而且,虽然名为常量指针,但其指向可以...

black_kyatu的博客 3875
上一篇: 海蜘蛛详细安装教程(图解)
下一篇: matplotlib使用示例——直线坐标系、极坐标系、柱形图、直方图、散点图、气泡图、饼图、多边形、3D图、盒图
lyz21
博客等级 码龄9年 2310粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值