c++指针的自我理解

UE5.3.2 + VS2022社区版在Win11上的C++编译环境配置全解 Unreal Engine 5的C++开发依赖严格的工具链协同,其核心在于Visual Studio编译器版本、Windows SDK与引擎构建系统(UBT)的精准匹配。UE5.3.2强制要求MSVC v143.4(即VS2022 17.4+)及Windows 11 SDK 10.0.22621.0,任何偏差都会引发LNK2019链接失败、C1083头文件缺失或MSB8066构建中断等典型错误。该配置不仅关乎安装顺序,更涉及注册表清理、PATH环境变量、SDK路径注入与运行时DLL加载等底层机制。适用于Wi 阅读详情

c语言最强的莫过于指针,c++程序猿,对它也是又爱又恨,它很强大却很容易让人弄混以至于出错(错误一般出的不小)。博主也被它弄的死去活来。(本文纯属博主理解,有错请指出,谢谢)

问题1

$ int val = 20;
$ int *p;
$ p = &val;
$ int val = 20;
$ int *p = &val;   // p存放着val的地址,或者说p是指向变量val的指针

这是博主纠结的第一个问题,许多程序在开始声明指针和使用指针,有以上两种写法。第一种是不直接初始化指针,系统将会给指针p一个不确定的值,然后在用val来初始化指针。第二种是直接在声明是初始化指针p。baidu和google均无果。

$ int val = 20;
$ int* p; 
$ p = &val;
$ int val = 20;
$ int* p = &val;

换一种写法,将 *和类型写在一起,就好理解多了。由上可知p是一个int型指针,*p 就是int类型。所以上面的就很好理解了,都是将val存放的地址赋给p,让p来存放val的地址。

问题2

操作符在c++程序中有多个作用,一个就是乘号,另一个是解引用符。:如果指针指向了一个对象,则会使用*(解引用符)来访问该对象。

$ int val = 20;
$ int* p = &val;
$ cout << p << endl;   // 输出:地址
$ cout << *p << endl;  // 输出:20

cout << p 将会输出p存放val的地址值。如果需要输出p所指对象的值则需要* 来解除引用,得到指针p所指的对象,*其实是一个暴露作用,将p所指的对象的值暴露出来。

问题3

$ cout << p << " " << &p << endl;
运行结果:
这里写图片描述
p存的地址和&p取得地址值总是差4

$ if(p == &p)
$      cout << "Yse" << endl;
$ eles 
$      cout << "No" << endl;

这里写图片描述
博主将p和&p进行比较看他们的差别,错误指出这是int*和int**之间的比较。所以&p是一个int**类型.
p存放的是val的地址,而&p存放的是指针p的地址
$ cout << p << " " << *&p << endl;
此时p和&p的地址却是一样的!似乎又回到了问题2上了&p是指针p的地址值,此时作为解引用符,将&p的内容暴露出来了,即p的地址,所以p和*&p的地址是一样的。

问题4

#include<iostream>
using namespace std;
int main()
{
    int i;
    int* pi;
        int** ppi;
    ppi = &pi; // 1
    *ppi = &i; // 2
    i = 'a';    // 字符a的ascll码为97
    cout << i << " " << *pi << " " << **ppi << endl; 
    cout << &i << " " << &pi << " " << &ppi << endl;  
    cout << pi << " " << ppi << endl;
    return 0;
}

结果:
这里写图片描述
语句1 把ppi初始化为指向变量pi,就可以安全对ppi执行间接访问操作
语句2 把pi(通过ppi间接访问)初始化为指向变量i。

间接访问可以更好的理解指针。当间接访问的层次越多,需要使用的次数则会越少(摘自《c与指针》)

040、未来展望:MLIR与编译技术的演进方向 MLIR不是又一个编译框架,它更像是一套“元框架”——提供构建专用编译工具的能力。未来几年,我们会看到更多垂直领域(自动驾驶、射频信号处理、生物计算)出现基于MLIR的专用编译器,它们可能不会挂“MLIR”的名字,但内核都是这套可扩展的IR基础设施。不要等MLIR“成熟”再用,现在就该把它当成一把瑞士军刀,先挑刀口最锋利的那个功能(比如图优化、循环变换)用起来。编译技术的演进不再是学术界的独角戏,而是越来越贴近实际生产中的异构、动态、领域专用需求。 阅读详情

相关推荐

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

编译C++时乘号*识别成了指针的运算符

C++编程初级错误

小段的博客 1176

从0到1做AI漫剧:即梦+豆包+剪映+红果全流程实战

AI视频生成正在重塑内容创作的生产方式,它让原本高门槛的影视制作,变成了一条由文本、画面、剪辑与分发环节协同的流水线。理解其底层原理,在于将大模型的语义理解、图像生成与视频合成能力,与工程化的流程管理相结合,从而实现从创意到成片的自动化输出。这种技术的价值,不仅体现在降低制作成本,更在于让个人创作者能够独立完成高质量短剧,并快速迭代内容。在短剧、短视频、广告营销等场景中,利用即梦生成画面、豆包编写剧本、剪映完成剪辑、红果进行分发的组合,已成为一种被广泛验证的实践路径。本文聚焦AI漫剧制作,从环境准备、分镜设

weixin_34072637的博客 384

C++进阶-指向自身的 this 指针

指向自身的 this 指针 既然各个对象都使用同样一份成员函数代码,那么在成员函数之中,如果要对各个具体对象的成员变量进行访问,又如何找到这个成员变量所属的具体对象呢?例如,有这样一个简单的类: class Base { public: // 成员函数访问成员变量 void SetValue( int nVal ) { m_nVal = nVal; } // 类的成员变量 private: int m_nVal; }; 在这个类的 SetValue()成员函数中,我们利用参数

AndyJ的学习之旅 2536

从零到精通:ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程

本文详细介绍了ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程,从环境准备到高级功能扩展,帮助开发者实现精准控制。通过集成模型预测控制(MPC),机械臂能够优化复杂轨迹规划,处理动态避障,提升工业自动化效率。

juice的博客 708

25年PINN创新点大盘点!

在科研论文的激烈角逐中,想轻松产出高含金量成果?物理信息神经网络(PINN)堪称“宝藏研究方向”,是冲击高分区论文的绝佳赛道!对于渴望发表优质论文的科研伙伴,这三大研究路径值得重点关注。首先是自适应PINN,在PINN训练过程中,物理方程与实测数据间的矛盾常常导致权重调节困难,而恰好直击这一痛点,是极具价值的研究方向。其次,同样前景广阔,传统多物理场同时训练效果欠佳,如今分阶段训练方法脱颖而出,成效显著且竞争较小。最后,探索及多任务学习等技术的融合,能实现优势叠加,碰撞出创新火花。

Malaai的博客 1971

C++学习(五) C++复合数据(下)

指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一。利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;指针能够灵活的操作内存,合理的操作内存能够使程序更高效。1.指针的概念 本质上讲指针也是一种变量,普通的变量包含的是实际的数据,而指针变量包含的是内存中的一块地址,这块地址指向某个变量或者函数,指针

千里积于跬步,江海成于小流 843

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 264

对于C++中:this指针的理解

先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如

2859

AI Agent Harness实时监控大屏搭建实战

本文将以目前主流的AI Agent管控框架Harness为基础,结合React、ECharts、WebSocket技术,手把手带你搭建一套完整的实时监控大屏,覆盖全局概览、状态分布、工具调用统计、异常告警、实时日志等核心功能,不需要复杂的底层开发,复制代码就能快速跑通。本文我们从需求出发,先梳理了AI Agent的核心监控指标,然后搭建了监控大屏的静态布局,逐个实现了各个图表,对接了Harness的实时数据源,最后加了交互和告警功能,完整走了一遍监控大屏从设计到落地的全流程。

大数据洞察的博客 177

pg lib的信息及产生pg lib的三种方法

pg lib相比basic lib会多几方面pg 信息。除了pg arc(pg pin)以外,liberty还提供电压值,以及pmk cell的power_down_function功能相关信息。1.电压值除了常见的primary pg还有secondary pg和衬底。2.pg arc后端需要去做redhawk功耗分析,需要pg liberty提供pg arc,如果没有pg arc就需要手动去写custom lib代替3.pmk cell的power_down_function。

m0_61544122的博客 595

C/C++指针的理解和解析

C/C++

小丑鱼的专栏 466

9.16华为OD机试真题 新系统 - 统计特殊数字 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 统计特殊数字 (Java/Py/C/C++/Js/Go)

算法大师! 766

C++ 自我对指针使用中的一些理解总结

以下举例类型为整型int,对于其他基础变量类型也同样适用。 C++ int* 传参数含义两种理解: 1、传入一个int整型变量的地址,修改此变量的值,可传出修改后的值; 2、传入一维数组; 如果传入参数前对int*参数赋值为null,那么在函数内对此参数的任何修改都无法传出去。 如果传入参数前已经对int*参数进行初始化内存,比如:int* boxes = int[10]; 那么传入的就是一维数组的首地址;在函数内对一维数组内的值进行修改,就可以传出修改后的值。 C++ int** 传参数含义

qq_27278957的博客 166

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

C/C++指针与const的自我理解

一: 指针是一个类型: 指针类型 ; 指针并不是变量。 提要: (1) int a = 10; const int*aPtr = &a; 首先,定义了指针类型的变量; 其次,int* aPtr; 指针类型的变量,其实是定义了两个变量。一个是指针类型的变量a, 一个是普通变量 *a 【注】那这么做的意义是什么呢? 答: 你可以使用这个变量,但你不能修改-----这就是const 和 指针 组合的意义。 (2)把 ‘*’ 读成 pointer to. (3)把const和向后紧贴着的一个类型一

JuniorChestnut的博客 229

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C++】指针算法自我复盘 有模糊的同学可以点进来看下 我的理解有问题的可以指出 谢谢

那这里的意思就是划分出一个空间给变量a存储数字 然后将空间里面存入数字3。这个代码的意思是 给a划分一个区域 来存储变量a的数值 如果我们再写。我们在定义一个数组后 使用指针指向数组的时候数组的。

programmer_lyc的博客 372

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

指针常量和常量指针的区别

in 学习小组

weixin_39992803的博客 1599

[Effective C++]条款11:在 operator= 中处理”自我赋值“

确保当对象自我赋值时 operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及 copy-and-swap 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。 自我赋值就是把对象赋值给自己,编写 operator= 的时候一定要考虑到这种自我赋值的情况。 ...

qq_45803411的博客 199

【重学C++】【指针】轻松理解常量指针和指针常量

前有数组指针和指针数组,现有常量指针和指针常量,就问你晕不晕?下面继续来讲解这些非常容易混淆和引起混乱的概念原理与用法。本文的内容是 常量指针和指针常量。

同学小张的博客 1747

【c++】智能指针——实现内存的自我回收机制

目录 一、了解智能指针 1、智能指针:c++的自我内存回收机制的实现 2、 智能指针是面向对象的指针,以对象的形式做指针的事; 二、介绍几种智能指针 1、auto_ptr 2、scope_ptr 3、shared_ptr强智能指针 带有引用计数的智能指针 4、weak_ptr 弱智能指针 可以解决强智能指针相互引用的问题 一、了解智能指针 ...

IT_Mitchell的博客 2787

【编程语言】理解C/C++当中的指针

指针是C/C++语言中一个非常强大且重要的概念,也是编写高效程序的基础之一。对于没有编程背景的初学者来说,理解指针可能有些难度,但通过本篇文章的介绍,相信你会对指针有一个清晰的认识。本文将从指针的基本概念、作用、代码示例、注意事项等方面,带你一步步了解指针的世界。

XuanRan的博客 5310

深入理解 C/C++ 指针

简单来说,指针是一个保存了内存地址的变量。普通变量存储的是数据本身,而指针存储的是某个变量的内存地址。可以通过指针访问到该内存地址中存储的数据。p保存的是a的地址(指针)。*p解引用p,表示我们访问了a的值(实际数据)。

Yhame的博客 2349

【Cpp】指针与引用

在C语言中,我们对指针的规范并不严谨——我们常常会用void*来传入一个不知道其变量类型的指针,为了兼容CCpp允许这样的语法存在,但是,由于这样的指针不具有安全性,我们无法通过来解引用void*,这就需要用到我们的显式转换。为了方便看指针的引用而不是由一堆组成了参数和参数类型,我们采用引用来让这种写法变得更加简洁;

Mongxin_Chan的博客 1121

C++ 指针的理解及使用

C++ 智能指针

u010404534的博客 899

对C++指针的理解

文章目录空指针和野指针const修饰指针 指针变量和普通变量的区别 普通变量存放的是数据,指针变量存放的是地址 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用 空指针和野指针 1、空指针: 定义:指针变量指向内存中编号为0的空间 用途:初始化指针变量 注意:空指针指向的内存是不可以访问的 //指针变量p指向内存地址编号为0的空间 int * p = NULL; //访问空指针报错 //内存编号0 ~255为系统占用内存,不允许用户访问 cout <&lt

kk阿彬 1386

【CPP.Primer】对指针的理解

cpp.primer 指针 const

啊迪 727
上一篇: virtual析构函数
下一篇: 爬虫初体验,解析网页Table
eleve11
博客等级 码龄10年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值