首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解指针

我们首先从思维导图切入,大致理解指针这一章的思维与框架: 基本概念的理解  内存和地址   我们都知道电脑在运行时,需要将内存加载到cpu中,等待运行完毕后,又返回到cpu当中,那么,cpu是如何快速找到地址的呢...指针的运算 指针的类型决定了指针向前一步或者向后一步有多大。 指针加减整数 指针加减整数就跳到对应的数值上。...野指针 何为野指针:野指针即为指针指向位置不可知,不正确的,没有限制的。...&a是数组的地址,数组的地址也是地址,大小是4/8个字节 8.有两种理解方式①*和&抵消, ②将整个数组的地址取出来再解引用,得到的就是整个数组。int(*)[4] 9....p加0还是a的地址,解引用得到a,一个字节 ②当作数组理解,把常量字符串想象成数组,p可以理解成数组名。p[0]就是首元素。 5.

8710
您找到你想要的搜索结果了吗?
是的
没有找到

初识指针指针指针变量、如何理解地址、指针类型的意义、void*指针、野指针、空指针)(笔记)

解引用 return 0; } 二、指针指针变量 指针:地址 指针变量:变量-存放地址 指针变量用来存放地址的,指针变量并不完全等同指针...2.32位平台下地址是32个bit,指针变量的大小是4个字节 64位平台下地址是64个bit,指针变量的大小是8个字节 三、如何理解地址: 计算机中硬件单元要互相协同工作(协同:互相进行数据传递...可以简单理解为:32位的机器就有32根地址总线,每根线只有两态, 表示0,1[电脉冲有无],那么一根线就能表示2中含义,2根线就能有4种含义。...四、指针类型的意义(为什么不用ptr_t p代表所有指针) 1.指针解引用的时候有多大权限 (如果一个指针代替所有的话,解引用时的字节与变量定义类型不同) 2.指针类型决定了指针向前或向后走一步有多大...指针未初始化 2.指针越界访问造成野指针 3.指针指向的空间释放 1.

12610

指针理解与操作

一: 指针理解与操作 1:指针指针变量? 指针是什么?以及指针地址的概念? 指针就是地址,地址就是指针指针变量可用于存放地址。...指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。 将指针的等同于指针变量是不严格的说法,指针并不是存放地址,指针变量才可以存放地址。...,多级指针,指向指针指针?...这边的指针大家在代码中就理解指针变量就可,这样严格一些就不会弄混。...我们定义一个指针变量,既然是一个变量,那肯定需要空间,或者叫内存空间,既然是占用了内存空间,那必然会有地址,既然是有地址,我们必然可以定义另一个指针来存放该指针变量的地址。所以可以称之为双重指针

29630

彻底理解CC++指针

彻底理解C++指针.pdf 推荐阅读pdf版本,原因是从WPS复制粘贴到ChinaUnix后格式有些丢了。 1. 概念 1.1. 双指针 指向一个指针指针。 1.2. ...指针数组 由指针值组成的数组,也就是说数组的每个元素值的数据类型均为指针类型,如:int* p[2]; 1.3. 数组指针 指向一个数组的指针。 1.4. ...常见指针定义解读 int *p; p为指向int值的指针,也可以说是指向一维数组的指针,假如有一个一维数组:int m[8],则可:p = m; int *p[8];...在这里,b1是一个双指针,也就是指向指针指针。本质上就是一个指针,因此在32位平台上它的值是4,在64位平台上它的值是8。...回归本质 指针的加减操作,实际是对地址的操作,而解引用“*”是取所在地址的数据,数组下标操作“[]”也是取所在地址的数据。 彻底理解指针,最关节是理解内存是啥。

70510

进一步理解指针2:双指针指针数组和数组指针

进一步理解指针2:双指针指针数组和数组指针.pdf 1. 概念 1.1. 指针 对于“p + 1”,这里的“1”是啥?...双指针 指向一个指针指针。 1.2. 指针数组 由指针值组成的数组,也就是说数组的每个元素值的数据类型均为指针类型,如:int* p[2]; 1.3. ...在这里,b1是一个双指针,也就是指向指针指针。本质上就是一个指针,因此在32位平台上它的值是4,在64位平台上它的值是8。 5. 初始化 如何来初始化双指针指针数组和数组指针?...)); printf("pp=%p\n", pp); printf("pp+1=%p\n", pp+1); // 不要将“pp[0][1]”理解成...相关参考 《进一步理解指针:一维数组和二维数组转换》: http://blog.chinaunix.net/uid-20682147-id-4967871.html 《常见指针定义解读

1.5K10

【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)

前言 通过前几节我们学了前面五节指针和学习了sizeof操作符知识,本小节,阿森继续和你一起做一维数组和指针笔试题,当然还有关于指针运算的笔试题,干货满满!让我们开始做题 !...char* arr1[10]; //存放字符指针指针数组 int* arr2[10]; //存放整型指针指针数组 int(*arr3[5])[6] ;//存放数组指针的数组指针数组...当操作数是指针时,它计算的是指针变量本身占用的字节数,与它指向的对象大小无关。...地址时,地址也是指针类型,计算的还是指针类型占用的内存大小,4或8字节。...3️⃣ 总结 本小节我们学习了sizeof和strlen对一维字符数组,字符串数组和指针变量进行练习,我们应该对指针有了更多的理解,但是他们都离不开我们以下的知识点。

13310

深入理解C语言指针

一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解指针,就像酒店的门牌号一样。...int y = 20;”的实际含义如下: 去酒店订了两个房间,门牌号暂时用 px、py 表示 让 10 住进 px,让 20 住进 py 其中门牌号就是 px、py 就是变量的地址 x 和 y 在这里可以理解为具体的房间...1.2、指针变量和指针的类型 指针变量就是一个变量,它存储的内容是一个指针。如果用前面的例子,可以理解指针变量就是一张房卡,房卡存储了房间号的信息。 在我们定义一个变量的时候,要确定它的类型。...首先我们把按照上面 1 来理解,那么 nums 就是一个数组,则nums 就作为这个数组的首地址。第二个维度还是取 nums[0],我们把 nums[0]作为一个名称,其中有两个元素。...函数指针定义如下: 数据类型 (*函数指针名)(); 函数指针在进行“*”操作时,可以理解为执行该函数。函数指针不同与数据指针,不能进行+整数操作。

47320

深入理解C语言指针

一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解指针,就像酒店的门牌号一样。...int y = 20;”的实际含义如下: 去酒店订了两个房间,门牌号暂时用 px、py 表示 让 10 住进 px,让 y 住进 py 其中门牌号就是 px、py 就是变量的地址 x 和 y 在这里可以理解为具体的房间...1.2、指针变量和指针的类型 指针变量就是一个变量,它存储的内容是一个指针。如果用前面的例子,可以理解指针变量就是一张房卡,房卡存储了房间号的信息。 在我们定义一个变量的时候,要确定它的类型。...首先我们把按照上面 1 来理解,那么 nums 就是一个数组,则nums 就作为这个数组的首地址。第二个维度还是取 nums[0],我们把 nums[0]作为一个名称,其中有两个元素。...函数指针定义如下: 数据类型 (*函数指针名)(); 1 函数指针在进行“*”操作时,可以理解为执行该函数。函数指针不同与数据指针,不能进行+整数操作。

1K00

一级指针简单理解

两个关键符号: & : 取内存地址符 * : 取内存值符 指针的操作规律: 1.声明的时候是往里放地址 int *p = &num, 2.直接拿的时候就是直接操作地址内的值 *p = 10; 在 C...中操作地址就可以操作值,就跟 java 中两个引用类型拿到引用可以操作内一个对象一样。...这就证明了指针变量存的是地址。 当程序再往下走 *p = 10 时,再回头看 &num 的值,已经变红,修改成了10。...2.传递指针 void main() { int num = 100; change(&num); //形参是指针类型,就可以将地址传递过去。...} void change(int *p) { //创建一个指针用来接收地址 *p = 20; } 需要注意的是C当中的方法形参使用的是变量副本机制,也就是说,方法形参也是有个自己的内存地址。

53030

Java GC详解 - 1. 最全面的理解Java对象结构 - 对象指针 OOPs

还是需要更加深入的了解下源码,才能更好地理解 JVM,进行调优。这个系列,将在讲述 Java GC 各种原理的基础上,结合对应的源码分析,并附上源码地址。...这个指针可能是被压缩的,就是压缩指针(Compressed OOPs)。当开启对象压缩时占用4字节(JVM默认开启),关闭时占用8字节 1.1....类型字压缩指针与 JVM 最大内存 压缩指针这个属性默认是打开的,可以通过-XX:-UseCompressedOops关闭。 首先说一下为何需要压缩指针呢?32 位的存储,可以描述多大的内存呢?...这就是压缩指针的原理。如果配置最大堆内存超过 32 GB(当 JVM 是 8 字节对齐),那么压缩指针会失效。...压缩指针是否启用和 Java 对齐字节大小(-XX:ObjectAlignmentInBytes,默认是 8,也就是 8 字节对齐)还有最大堆栈大小相关。

85430

数组指针的推演与理解

数组指针一般用于函数传参,其他基本很少遇到,其概念相对繁琐,本文将对数组指针做一个从头到尾的透彻分析,如果以后印象模糊了,再回来看看。..., 0, 1, 2 }; // 1、二维数组中[]运算符优先级最高,所以先运算下面的array[3] // 2、int array[3] 是一个一维数组 // 3、int array[3] 可以间接的理解为...int[3] array // 4、而 int array[3][4] 则间接的可以理解为 int[4] array[3] // 5、意味着 array[3] 中每一个数据类型,都是 int[4] 类型的...// 像int *p、double *p 这些写法代表是一个int类型的指针、浮点型类型的指针 // 而 int[4] *twoArray 我们则称他为 “数组指针”,因为前面是一个经过拆解的int类型的一维数组...// 上面我们理解一维数组 int oneArray[i] == int[i] oneArray // 同理,我们可以推理出 int *twoArray[4] == int[4] *twoArray

12930

Java中的this指针

Java中,提到this谁都不会陌生,这里再简单整理下,备忘。...Java中,一般来说this指针指的是当前正在访问的这段代码的对象,但是如果在内部类中需要使用外部类中的对象,这时就需要使用外部类的类名进行限定。这种方式在Android开发中也比较常见。...String[] args) { A a = new A(); } } Inner是内部类,访问类A中的outer()方法,又由于匿名内部类中有同样的方法,所以需要使用A的this指针进行限定...Swift中的convenience initializer类似,在Swift中,convenience initializer必须调用或者说代理给designated initializer),并且Java...参考资料: http://bbs.csdn.net/topics/260050701 《Java语言程序设计——基础篇》 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

33510

【C语言】深入理解指针1

✔所以我们可以理解为:内存单元的编号 == 地址 == 指针 ☞(2)指针变量与地址 ①取地址操作符(&) 理解了内存和地址的关系,我们再回到C语⾔,在C语⾔中创建变量其实就是向内存申请空间。...} ③指针类型 我们看到pa的类型是 int* ,我们该如何理解指针的类型呢?...其实这⾥是把a的修改交给了pa来操作,这样对a的修改,就多了⼀种的途径,写代码就会更加灵活, 后期慢慢就能理解了。...3.void*指针指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为⽆具体类型的指针( 或者叫泛型指针),这种类型的指针可以⽤来接受任意类型地址。...指针的类型决定了指针向前或向后走一步有多大(距离),也决定了指针+-整数的结果。 (2)指针-指针 指针能够相减的前提:两个指针指向的是同一块空间。

6510

C语言·深入理解指针 (初阶)

1 何为指针: 简单来说,指针就是一个地址,存放的是内存单元编号。 想要理解指针,我们首先要对一下与指针相关的东西有所了解。...1.1 地址总线: 在计算机中,我们常用二进制来对数据进行存储,而二进制又由0 / 1组成,在计算机中,我们将高电压表示1,低电压表示0 我们可以简单理解,32位机器有32根地址总线, 每根线只有两态,...3 野指针: 3.1 概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) 3.2 野指针的成因: 1. 指针未初始化; 2. 指针越界访问; 3....指针使用之前检查有效性 4.指针的运算: 4.1指针 - 指针指针 - 指针 表示的是指针之间的元素的个数; 例如: 因为arr[0] 和arr[8]之间隔了8个元素,并且arr[0]的地址小于arr...ps: 感谢大家的观看,后续的深入理解指针(进阶)将会在不久后发布。

8810

C语言:深入理解指针(2)

通过深入理解指针(1),我们对指针有了一个初步的了解,还了解了指针变量类型的意义、指针的运算、assert断言、const修饰变量、野指针………………下面我们继续深入学习。...一、数组名的理解        通过深入理解指针(1),我们对于数组名arr的理解是数组首元素的地址,但其实这有两个例外。...就需要指针运算来理解。...通过分析这个运行结果,我们知道了访问数组元素的几种书写形式,以及访问数组的一些底层逻辑,那么我们在书写时就有多种选择,我们还是要按照便于他人理解的角度去写代码,但是无论形式是如何的,本质上是要理解指针的逻辑...strlen(arr2)=3,很好理解

11810
领券