个人关于指针的理解

深入理解指针:一文让你彻底理解指针 好多人都说指针很难,其实指针并不难,你不是不懂指针,你是不懂内存管理,搞懂内存管理,指针就是纸老虎 阅读详情

指针是什么?如何理解指针?

因为指针是抽象的,所以这里我把它拟物化,这样解释也许跟容易懂。

指针的专业解释是:指针是内存单元的编号。

说明:以下的黑方框都代表一个字节

1)对于内存。

      我们一般认为内存的基本单位是字节,内存空间由很多字节组成的。

      内存可以存储数据,所以我们把每个字节当做是一个“箱子”。

       数据存入内存就好比在箱子里面放数据

      


        但是,C语言中各个类型在内存中占得字节数是不一样的。

     比如char型,只要一个字节就够了,所以一个字符只需一个“箱子”。

     而int型需要4(一般是4个字节)个“箱子”才放得下。

     double型则需要8个“箱子”。


2)编号。

     内存中每一个字节都有一个编号(是一个用16进制表示的值),这就是指针(或者说地址)。

     这就好比仓库,为了方便管理货物,为箱子都编了号。

    

3)数的存储。

     int a=100;

     内存中的状态:

     

    定义a=100,a占4个字节,也就是有4个指针,那么,哪个指针才是指向a的呢?

    当一个数据占2个及以上字节的内存空间时,把第一个字节的地址当做他的指针。

    也就是说,这里的0022FEE0才是a的指针。


4)数组与指针。

   我们知道,数组的元素在内存中是连续储存的。

   int arr[3]={1,2,3};

   内存中的状态:

   

     ①a[0]的(指针)地址是:0022FEE0

         a[1]的(指针)地址是:0022FEE4

         a[2]的(指针)地址是:0022FEE8


     ②数组名也是一个指针,它的值是第一个元素的地址

        即:arr == &a[0]

        值得注意的是:数组名是一个指针常量,也就是说他的值是不能改变的。

        比如 arr++ ,arr - -等试图改变arr的值的做法都是不合法的

    ③arr是第一个元素的地址,arr+1是第二个元素的地址,arr+2是第三个元素的地址。。。

       有人会问:第二个元素个第三个元素的地址难道不应该是arr+4和arr+8吗?

       注意:数组中arr+n指的是arr指向的元素的后面第n个元素的地址。

       实质上来说,应该是:arr+k*n  。因为我们开始定义数组为int型,所以编译器自动取K的值为4。

       k是一个由编译器根据数组类型自动确定的值。

      也就是说,arr[1]的地址是:arr+4*1         arr[2]的地址是:arr+4*2

       仅作了解,我们在写代码时万万不能按照这个思路

C语言指针个人理解 指针通俗来讲就是地址,指针就是地址,地址就是指针。我们定义了一个变量,系统对变量进行编译的时候就会给这个变量分配内存单元,内存若是一个公寓,那么内存单元就是公寓的一间间屋子,而指针就是公寓的“ 门牌号 ”。指针变量: 含义就是存放变量地址的变量,本质仍然是变量数据类型 *指针变量名 //eg int *a;比普通的变量定义 多一个*,这里的*就是表示该变量为指针变量注:若数据类型为void类型则表示该指针变量为空类型TC系统VC系统2字节4字节注:指针变量所占字节数和数据类型无关。 阅读详情

相关推荐

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8

陈硕的Blog 1万+

详解C指针

基础的东西经过很长时间积累而且还会在未来至少10年通用。 指针是一个特殊的变量,它里面存储的数值被解释成为内存(用户空间的虚拟内存)里的一个地址。一、指针的属性一个指针包含四个方面的内容:指针的类型、指针所指向的类型、指针所指向的内存区、指针本身所占据的内存区。接下来就下面几个例子作说明:1、 int *p; 2、 char *p; 3、 int **p; 4、 int (*p)[3]; 5、 in

wenqian 'blog 4567

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2621

指针的深度理解

指针是地址,地址是数据,数据可以用空间来储存;指针变量则是一种变量,一种用来保存指针地址的变量。若是要区分这两种概念,首先要明确变量的两个属性:变量有两个属性,一个是左值(空间,存放内容的空间),另一个则是右值(数据,占具体内存的数据)。那么对于指针,既然是地址,那么则可理解为右值。但对于指针变量,它是变量,则存在两个属性,左值和右值。在解释之前,举个例子:如果学校领导要去学生公寓中找学生,若果没有宿舍的门牌号,那么领导只能按着楼层去一层一层的寻找目标宿舍,其过程十分繁琐。

weixin_74341685的博客 1375

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1447

C语言学习之指针:从初始到深入

一、指针的基本常识 1.什么是指针? 对于指针需要掌握以下几个基本的概念: <1>指针是一种变量类型,也是具有空间、内容、地址三个属性。空间属性值得是:在定义指针时,内存会给指针变量分配指定类型大小的空间,空间的大小为四个字节(32位平台下)。内容属性指的是:指针变量内部存储的数据,即存放的是地址。因此,通常也会说指针就是地址,地址就是指针,要注意的是这里的指针指的是指针的内容。 <2>指针是有类型的,其类型决定了指针访存时的步长,即指针解引用操作时的权限。比如:char *

qq_44408326的博客 511

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9609

浅谈 指针-你真的了解指针吗?

指针 关键字:另类,新奇 最近在学习的过程中,产生了疑问,也得到了解决,对于指针的了解又上了一个层面 -----下面,我就对 (平日里以为很了解的指针)来发表一下我的一个另类的观点    请看下面代码: #include int main() { int *p; return 0; }上述代码,我们也许会认为:这是定义了一个《指向整型变量的指针》 。  

随心的博客 2513

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 366

智启古文字新章:AI、ML与大数据驱动的知识图谱构建

摘要:本文聚焦AI、ML与大数据驱动的古文字知识图谱构建。开篇点明古文字研究困境,凸显技术革新迫切性。随后阐释AI、ML、大数据基础概念,详解其在图谱构建里的数据采集、知识抽取、关系挖掘运作流程,穿插线性代数、概率论等数学原理。实战展示殷商甲骨文图谱搭建全程,含数据处理、模型训练。还探讨跨模态融合等前沿挑战应对,兼述技术融合衍生的教育科普革新、伦理文化责任、国际合作交流,勾勒古文字数字永生的长远愿景。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1616

个人对指针的一些理解

#include&amp;amp;lt;stdio.h&amp;amp;gt; int main() { int a = 10; int *p = &amp;amp;amp;a; int **pp = &amp;amp;amp;p; int ***ppp=&amp;amp;amp;pp; printf(&amp;quot;地址:&amp;amp;amp;a=%d &amp;amp;amp;p=%d &amp;

Start_to_crazy的博客 391

解决此平台不支持虚拟化的 Intel VT-x/EPT故障问题

当我们在VMware Workstation虚拟机上【启用】虚拟系统(如:Windows10)所在的虚【拟机设置】【处理器】【虚拟化引擎】下面的【虚拟化 Intel VT-x/EPT 或AMD-V/RVI(V)】内容后,在启动虚拟系统时,虚拟系统无法启动,且弹出【此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续】窗口

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

个人对指针的指针理解

每次一看到两个*号,就头疼,终于在一次看源代码时,看了半天才弄明白其中含义,所以写一写对指针的指针的理解。 int main() { long t = 100000006; long *a = &t; long **b = &a; cout<<*(short **)b; system("pause"); return(0); } 以一个小例子来说明: ...

qq_34489443的博客 237

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

指针——个人的一点理解

指针(Pointer) 还记得大一的时候,学习了人生中第一门编程语言——C语言。那个时候,是我第一次接触到 “指针” 这个概念,当时对指针的理解就仅仅停留在只要见到*就觉得它是指针,没有弄明白它的真正含义。C语言学完之后,也就基本没在碰过指针了。直到最近开始上Java SE这门课程,才重新拿起“指针”,也因此对指针有了新的理解。下面我就结合这两天上课的领悟,简单说一下我对指针的理解。 首先...

Agonyq的博客 935

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

个人对指针的理解

记录个人对指针的理解

Silentmorning的博客 125

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++指针的个人理解

c++指针基础学习

Eburs的博客 761

个人理解—指针

整理一下学习的内容,个人观点可能存在错误。

qq_35229394的博客 285

个人对指针的通俗理解

个人对指针的通俗理解

qq_54215896的博客 328

个人关于指针的一些理解

假设这个世界是海绵宝宝的海洋世界,则以上代码段可以比作像海洋世界扔了三只生物,a好比章鱼哥,b好比海绵宝宝,c好比派大星。然后你扔进去的章鱼、海绵、和海星都必将沉底,假设分别落到了地皮一、地皮二和地皮三。👆以上结果第一行输出的值为a的值也就是1。👆以上代码段好比你建造了三个房子,房子的名字叫做p1、p2、p3。👆这个代码的意思就是说把铁人房子p1放到章鱼哥所在的地皮上。假设计算机是一个世界,那么地址就好比这个世界上的各个地皮。第二行输出的结果为章鱼哥的地址,也就是地皮一对应的值。(*号的意思就是揭开);..

qq_50620405的博客 256

个人对指针理解的记录

1).任何类型的指针在32位机器下,大小为4个字节.               int *p; int size = sizeof(p);               printf("%d\n",size); 输出结果为----&gt;&gt; 4. 2).type *p = NULL;                指针的本质:是一个有类型的地址,类型用来干嘛呢,就是决定了这个指针每次...

Orange_911的博客 179

数组指针的个人理解

先上代码: #include<stdio.h> int main() { int arr[2][3] = { {0,1,2},{3,4,5} }; int(*p)[3] = NULL; p = arr; printf("arr数组的地址 = %p\n", &arr); printf("arr[0]的地址 = %p\n", &arr[0]); printf("arr[0][0]的地址 = %p\n", &arr[0][0]); printf("*p的里面存

weixin_61958146的博客 265

C语言指针的个人理解

一、指针的概念 操作系统(32位系统)给每个存储单元分配了一个编号,从0x00 00 00 00 ~off ff ff ff,这个编号咱们称之为地址 所以 指针就是地址 操作系统存储数据或者分配内存均是以字节为单位的,所以一个地址代表的是一个字节,它有8位bit位。 1、指针的长度 无论什么类型的地址,都是存储单元的编号,在32位平台下都是4个字节, 即任何类型的指针变量都是4个字节大小 2、指...

qq_41583666的博客 264

数组与指针区别的个人理解

在编程中我们经常会会用到数组与指针,也都知道可以通过指针来访问数组,那这二者又有什么区别呢

Mmmmmmmi 431

个人c语言中指针的理解

定义指针: int * p; int i; p=&i; //p是指向i地址的指针 *p=10; //指的是i的值变成了10 指针在使用前一定要赋值 确定指针指向哪里 *为指针变量赋的值必须是一个地址 将指针变量初始化为空指针,意为该变量不指向任何值 int ptr=NULL; 将变量地址赋值给指针 int a; int *p=&a; 或者 int a,*p; p=...

PigWord的博客 474
上一篇: 关于scanf()函数的细节
下一篇: 堆和栈的区别
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值