二级指针详解

二级指针:也叫双指针,指针的指针用作参数,大多用在需 要函数改变该指针的指向时 代码目的是setPeople方法执行后,people指针指向了一个新 创建的people对象。

一级指针

log输出如下:

概述: people为一个指针,可以直接使用这个指针所储存的内存地 址,又可以使用这个地址里储存的值。 指针是一种数据类型,与其它的数据类型不同的是指针是一 种“用来存放地址值”的变量
%p 一般以十六进制整数方式输出指针的值
&取地址符号:&后面跟变量标识符即可获得变量的内存地址
指针虽然很小 但还是占一些内存,也有自己的内存地址

log中打印了3项:指针指向地址中的值(对象)、指针的值
(对象地址)、指针的地址

分析:2和1中的对象内容、指针的值都一样,只有指针本身
的地址不
一样,两个指针指向了同一块地址,但是这两个指针本身的
地址不同,这是两个不同的指针变量。
在函数的参数传递中,编译器会为函数的每个参数制作临时
副本。

此处people2就是people的副本;
3、people2指针指向了一个新创建的ZYPeople对象的地址
输出了指针指向地址中的值(对象)、指针的值(对象地
址)、指针的地址

4、和1一样

因为在函数的参数传递中,编译器会为函数的每个参数制作
临时副本(也就是拷贝指针)。所以people2在方法中赋值,
与外部的people没关系 实现不了目的

二级指针

?页码:2/3

log输出如下:

people3指针:实参 指向指针people的地址
people2指针:形参 指向指针people的地址
但people2和people3不是一个指针 它们的内存地址不同
1、指针指向地址中的值(对象)、指针的值(对象地址)、
指针的地址

2、指针people的地址 指针people3的地址
3、指针people指向地址的值、指针people的地址、指针
people2的地址
4、指针people指向地址的值、指针people的地址、指针
people2的地址
5、指针指向地址中的值(对象)、指针的值(对象地址)、
指针的地址

目的是要给指针people赋值 编译器会为每个参数制作临时副
本 副本与原指针指向同一地址
即便是people2指针是people3指针的副本
但是两个指针同时指向了people指针的地址
*运算符:指针所指向的地址中的值

因为people2是指针 people2指向了people指针的地址
*people2 意为 取出people指针的地址上的东西 即people指

对*people2赋值也就是为people指针赋值

时间: 2024-10-06 04:26:39

二级指针详解的相关文章

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

指针数组与数组指针详解

转自:https://blog.csdn.net/men_wen/article/details/52694069 指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节. 数组指针:数组指针可以说成是"数组的指针",首先这个变量是一个指针,其次,"数组"修饰这

C++Study 指针详解

C++指针详解 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明. 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3]; int *(*ptr)[4]; 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类

[转]C++ 智能指针详解

C++ 智能指针详解   一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::scoped_ptr.boost::shared_ptr.boost::scoped_array.boost::shared

C++函数指针详解

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很蛋疼的难点,那就是函数指针了.本博文详细介绍一下常见的各种坑爹的函数指针. 至于指针的详细学习,推荐这篇博文C++指针详解 与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址.函数指针就是指向这个地址.函数指针所指向的类型,就是函数本身.我们知道,指针所指向类型代表了指针所指向的内存区域的大小.所以函数指针所指向的类型,就是函数在内存中所占据内存的大小.知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数

Java指针详解___案例解答

大家先看看下面的这个程序:--------->相信初级程序员就能看得懂 int k1=1; int k2=k1; k2+=8; System.out.println("k1:"+k1); 大声回答,k1等于几? 输出: k1:1 这是为什么呢?不是明明k2已经指向了k1,然后k2的值发生改变,k1就要发生改变吗? 刚开始:k1 ,k2指向同一个内存地址: 当发生语句:k2+=8的时候,我们这么看:k2=k2+8,第一步:k2+8,很简单啊,等于9呗,这时候,内存空间会自动分配一个

C++ 智能指针详解

一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::scoped_ptr.boost::shared_ptr.boost::scoped_array.boost::shared_array.boost:

【C++】智能指针详解(一):智能指针的引入

智能指针是C++中一种利用RAII机制(后面解释),通过对象来管理指针的一种方式. 在C++中,动态开辟的内存需要我们自己去维护,在出函数作用域或程序异常退出之前,我们必须手动释放掉它,否则的话就会引起内存泄漏. 例如:我们用指针变量来创建对象时,需要手动来删除它 string * pstr = new string("hello world!"); .... delete pstr; 事实上,即使我们非常谨慎,但有时候的一些情况仍然会让我们防不胜防: //情况一:在程序某个分支内,忘

彻底搞定C语言指针详解

1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ---------------------------