我们首先从思维导图切入,大致理解指针这一章的思维与框架: 基本概念的理解 内存和地址 我们都知道电脑在运行时,需要将内存加载到cpu中,等待运行完毕后,又返回到cpu当中,那么,cpu是如何快速找到地址的呢...指针的运算 指针的类型决定了指针向前一步或者向后一步有多大。 指针加减整数 指针加减整数就跳到对应的数值上。...野指针 何为野指针:野指针即为指针指向位置不可知,不正确的,没有限制的。...&a是数组的地址,数组的地址也是地址,大小是4/8个字节 8.有两种理解方式①*和&抵消, ②将整个数组的地址取出来再解引用,得到的就是整个数组。int(*)[4] 9....p加0还是a的地址,解引用得到a,一个字节 ②当作数组理解,把常量字符串想象成数组,p可以理解成数组名。p[0]就是首元素。 5.
// 指针1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。...//键盘输入两个数,用指针将两个数输出 群:970353786 #include int main() { int a, b;//定义变量 int* p1, * p2;//声明指针变量 printf_s...("请输入两个数字,中间记得逗号隔开:"); scanf_s("%d,%d", &a, &b);//输入两个数 p1 = &a;//将地址赋给指针变量,或者理解为,p1取a的地址 p2 = &b;...p,q; p=&q; printf("please input��"); scanf("%d",p); printf("number is��%d",q); return 0; } // 指针
一、字符指针变量 通过之前的学习,我们了解了指针,int*是整型指针,指向的是整型;那么,指向字符型的指针就是字符指针,即char* #include int main() { char...有了对字符指针的理解,看以下代码: #include int main() { char str1[] = "hello world"; char str2[] = "hello...二、数组指针 在之前的学习中,我们学习到了指针数组,知道指针数组是存放指针变量的数组。 之前还学到整型指针变量,存放的是整型变量的地址,它所指向的是一个整形变量。...数组指针变量的初始化 定义数组指针变量以后,那该怎么初始化与赋值呢?在学习指针(2)中数组名的理解,我们知道&数组名取的是整个数组的地址,那么这里就可以讲数组的地址赋值给数组指针变量。...三、函数指针 函数指针变量 之前我们学习过数组指针,它是一个存放数组的地址的指针。
一、内存和指针 1、内存与地址 举个例子,一栋大楼中有许多个房间,如果想要快速的找到一个房间,就需要知道这个 房间的门牌号,这个门牌号就可以理解成这个房间的地址...:二级指针 二级指针:存放一级指针地址的变量。...void*指针 void是一个泛型指针,它可以接受任何类型的指针,但是不能进行指针运算和解引用操作。...指针-指针 指针-指针的绝对值是两个指针之间的元素个数。 前提:两个指针指向同一块内存空间。...六、野指针 野指针形成原因 1.指针没有初始化 int* p; *p=20; 规避:初始化指针;不知道指针该指向哪里,就给指针赋值NULL(空指针)。
一、数组名的理解 一维数组 通过之前的学习,我们知道了可以通过&arr[0](取地址操作)来取得数组首元素的地址,但是,数组名其实本来就表示数组首元素的地址 int main(...二维数组的理解: 把二维数组的每一行理解成一个一维数组,arr[0]就是第一行这个数组的数组名这样,二维数组里就存放着几个一维数组,二维数组的首元素就是第一行这个数组arr[0]。 ...我们知道,一个整形数组,存放的都是整型数组;一个字符数组,存放的都是字符; 那存放指针类型的数组,其实就是指针数组。...指针数组中每一个元素都是地址,又可以指向一块内存。...对于二维数组,用指针数组也可以来实现二维数组,但是指针数组中每个元素所指向的一维数组不是连续的。
this是javascript的一个关键字,也是比较容易令人迷糊的一个概念 this的本质:当前对象的所有者 示例1 var x = 1; function t...
图解 指针数组,重点在数组 数组指针,重点在指针 例子: include ...大小:一个int型指针长度的空间 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 ...,亦称行指针。...指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。...数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
include int main() { const char* str = "hello world";//把"hello world"的首元素的地址给了str //但是不能单纯的理解为数组...可以这么理解:str1和str2是可以修改数组中的元素的,如果不同数组间的修改会相互影响,那岂不是乱遭了。而str3和str4是不可以被修改的,那么让它们两指向同一块空间也是完全没有问题的。...11.1 一维数组传参 #include void test(int arr[])//可行,最容易理解的写法([]内的数字可以随便写,不影响系统的判断)该传参的本质就是int* arr...{} void test(int arr[10])//可行,最容易理解的写法。...); return 0; } 11.2 二维数组传参 #include void test(int arr[3][5])//可行,最容易理解的写法 {} void test(int
解引用 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.
但是指针变量本⾝的内容可变。 • const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。 5....指针运算 指针的基本运算有三种,分别是: • 指针+- 整数 • 指针-指针 • 指针的关系运算 5.1 指针+- 整数 因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸瓜就能找到后⾯的所有元素...野指针 概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) 6.1 野指针成因 1. 指针未初始化 2. 指针越界访问 3....指针指向的空间释放 6.2 如何规避野指针 6.2.1 指针初始化 如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. ...6.2.3 指针变量不再使用时,及时置NULL,指针使用之前检查有效性 当指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的 时候,我们可以把该指针置为NULL。
数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int *p = &arr[0]; 这⾥我们使用...数组名如果是数组⾸元素的地址,那下⾯的代码怎么理解呢? 输出的结果是:40,如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。...二级指针 指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里? 这就是二级指针 。...指针数组 指针数组是指针还是数组? 我们类比⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放指针的数组。 ...整型数组和字符数组 指针数组的每个元素都是⽤来存放地址(指针)的。 如下图: 指针数组的每个元素是地址,又可以指向⼀块区域。 7.
C语⾔中给地址起 了新的名字叫:指针。 所以我们可以理解为: 内存单元的编号 == 地址 == 指针。...指针变量和地址 2.1 取地址操作符(&) 理解了内存和地址的关系,我们再回到C语⾔,在C语⾔中创建变量其实就是向内存申请空间,⽐如: 比如,上述的代码就是创建了整型变量a,内存中 申请4个字节,⽤于存放整数...答案是:指针变量中。 比如: 指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。...3.3 void* 指针 在指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为无具体类型的指针(或者叫泛型指 针),这种类型的指针可以⽤来接受任意类型地址。...使得⼀个函数来处理多种类型的数据,在《深⼊理解指针(4)》中我们会讲解。
1.二级指针 指针变量也是变量,是变量就有地址,那指针变量的地址就存在我们的二级指针 !!!...首先要进行一个说明*号是说明这个东西是指针例如*pa说明,pa是一级指针,**ppa说明是二级指针,所以不难发现,有几颗*,说明是几级指针。...&a,**ppa就是&a所指向的内容,即10,所以**ppa=10. 2.指针数组 指针数组是数组,数组中的每个元素是指针,即指针数组是存放指针的数组。...指针数组的每个元素是地址(指针),⼜可以指向⼀块区域。 3.数组指针 数组指针变量是⽤来存放 数组地址 的,那它是如何使用的呢?如下所示 4.函数指针 首先,我们要知道函数也是有地址的。...因为有地址,所以也会有函数指针。 那函数指针有什么用呢,我们可以通过函数指针调用指针所指向的函数。
彻底理解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。...回归本质 指针的加减操作,实际是对地址的操作,而解引用“*”是取所在地址的数据,数组下标操作“[]”也是取所在地址的数据。 彻底理解指针,最关节是理解内存是啥。
一: 指针的理解与操作 1:指针与指针变量? 指针是什么?以及指针地址的概念? 指针就是地址,地址就是指针。指针变量可用于存放地址。...指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。 将指针的等同于指针变量是不严格的说法,指针并不是存放地址,指针变量才可以存放地址。...,多级指针,指向指针的指针?...这边的指针大家在代码中就理解为指针变量就可,这样严格一些就不会弄混。...我们定义一个指针变量,既然是一个变量,那肯定需要空间,或者叫内存空间,既然是占用了内存空间,那必然会有地址,既然是有地址,我们必然可以定义另一个指针来存放该指针变量的地址。所以可以称之为双重指针。
进一步理解指针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 《常见指针定义解读
前言 通过前几节我们学了前面五节指针和学习了sizeof操作符知识,本小节,阿森继续和你一起做一维数组和指针笔试题,当然还有关于指针运算的笔试题,干货满满!让我们开始做题 !...char* arr1[10]; //存放字符指针的指针数组 int* arr2[10]; //存放整型指针的指针数组 int(*arr3[5])[6] ;//存放数组指针的数组指针数组...当操作数是指针时,它计算的是指针变量本身占用的字节数,与它指向的对象大小无关。...地址时,地址也是指针类型,计算的还是指针类型占用的内存大小,4或8字节。...3️⃣ 总结 本小节我们学习了sizeof和strlen对一维字符数组,字符串数组和指针变量进行练习,我们应该对指针有了更多的理解,但是他们都离不开我们以下的知识点。
"%d\n", sizeof(arr1)); printf("%d\n", sizeof(arr2)); return 0; } sizeof与strlen的对比 二、数组和指针试题解析...printf("%u\n", sizeof(a[3])); //16 //a[3]是二维数组第三行这个一维数组的数组名,sizeof(数组名)求数组占空间的大小 return 0; } 三、指针运算试题...p被强制类型转换为无符号长整型指针,p+1跳过4个字节,Ox100000+4=Ox100000+0x4=Ox100004 return 0; } //题3 int main() { int a[3
先简单说一下两个的概念, 指针数组:是一个数组,数组中的每个元素都是指针,例如 char *p[3]; 数组指针:是一个指针,指向数组,例如 int (*q)[3]; 测试代码: #include int main() { int i=0; char a=12,b=34,c=56; char *p[3]={&a,&b,&c}; //指针数组 char y[]=...{1,2,3,4,5}; char (*q)[5]=&y; //数组指针 int z[]={6,7,8,9,10}; int (*r)[5]=&z; //数组指针...,windows指针大小占用8个字节,p是指针数组,且有三个元素,所以占用大小是3*8=24个字节;q和r分别是char和int类型的数组的指针,所以都只占用8个字节。...所以,指针数组是某一类指针的合集,是一个数组; 数组指针仅仅是一个指针,指向数组。
还是需要更加深入的了解下源码,才能更好地理解 JVM,进行调优。这个系列,将在讲述 Java GC 各种原理的基础上,结合对应的源码分析,并附上源码地址。...这个指针可能是被压缩的,就是压缩指针(Compressed OOPs)。当开启对象压缩时占用4字节(JVM默认开启),关闭时占用8字节 1.1....类型字压缩指针与 JVM 最大内存 压缩指针这个属性默认是打开的,可以通过-XX:-UseCompressedOops关闭。 首先说一下为何需要压缩指针呢?32 位的存储,可以描述多大的内存呢?...这就是压缩指针的原理。如果配置最大堆内存超过 32 GB(当 JVM 是 8 字节对齐),那么压缩指针会失效。...压缩指针是否启用和 Java 对齐字节大小(-XX:ObjectAlignmentInBytes,默认是 8,也就是 8 字节对齐)还有最大堆栈大小相关。
领取专属 10元无门槛券
手把手带您无忧上云