C++二级指针和指针引用

前提

已经清晰一级指针和引用。
可参考:指针和引用与及指针常量和常量指针 或查阅其他资料。

一级指针和二级指针

例子

个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析,可参考文末参考文章。

#include <iostream>
using namespace std;

void make(int **pp)
{
    **pp = 66;//这样只是改变了指向的值,即a, 指向没有改变
}
int main()
{
     int a=5;
     int *q=&a;
     int **pp=&q;
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"      value:"<<*q<<"  "<<a<<endl;
     //可将下面的注释去掉运行通过结果对比查看一级指针与二级指针的关系
//     cout<<*pp<<"  "<<&*pp<<"  "<<*&pp<<"  "<<**pp<<endl;
     make(pp);
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"      value:"<<*q<<"  "<<a<<endl;
     return 0;
}

运行结果:

如果改为:

#include <iostream>
using namespace std;

void make(int **pp)
{
   int * p=new int(66);
   *pp=p; //这样便使用函数通过二级指针更改了一级指针的指向(值便也改了),但原指向
}
int main()
{
     int a=5;
     int *q=&a;
     int **pp=&q;
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<"  "<<a<<endl;
     make(pp);
     cout<<"address:"<<&pp<<"  "<<pp<<"    "<<&q<<"   "<<q<<"       value:"<<*q<<"  "<<a<<endl;
}

运行结果:


指针引用

#include<iostream>
using namespace std;

void make(int *pp)
{
    pp=new int(66); //试图改变p指向的地址,但没有用,因为pp只是p的一个拷贝。
}
int main()
{
    int a=5;
    int *p=&a; //指针变量指向一个int类型的地址
    cout<<"address:"<<&a<<"       value:"<<a<<endl;
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
    make(p);
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
}

运行结果:

更改为:

#include<iostream>
using namespace std;

void make(int *&pp)
{
    pp=new int(66); //此时pp相当于p的别名,所以改的就是指针p本身,所以更改成功。
}
int main()
{
    int a=5;
    int *p=&a; //指针变量指向一个int类型的地址
    cout<<"address:"<<&a<<"       value:"<<a<<endl;
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
    make(p);
    cout<<"address:"<<p<<"       value:"<<*p<<endl;
}

运行结果:

参考:

二级指针和指针引用函数传参(C++)

原文地址:https://www.cnblogs.com/clwsec/p/11483193.html

时间: 2024-11-06 03:29:51

C++二级指针和指针引用的相关文章

值传递,指针传递;引用传递(c++独有)本质

要理解值传递.指针传递和引用传递的区别,主要要理解函数的实参和形参,函数的作用域(自动变量.栈),内存的布局以及指针和引用的特点.这里主要总结三种参数传递方式使用的主要场合. 值传递:只给函数提供输入值,需要复制开销,大对象很少使用值传递. 指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销.如果需要改变指针本身,可以使用二重指针或者指针引用. 引用传递:除了提供输入值外,还返回操作结果,无需复制开销. #include<stdlib.h> //值传递,函数体内变量n是参数

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

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

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

C语言指针及C++引用

经过c与c++的学习,整理一下关于指针以及引用方面的问题 指针: 指针是什么? 指针本身是一个变量,它存储的是数据在内存中的地址而不是数据本身的值,指针类型.指针所指向的类型.指针的值或者叫指针所指向的内存区.指针本身所占据的内存区都是我们要考虑的问题 1.int a=0,p;      p =&a; 2.int  a=0;       *p=&a; 第一种定义方法然后将a的地址赋给p.第二种是在定义指针p的同时将a的地址赋给指针p.我理解为  int *  是定义指针的标志 将指针p去掉

一级指针,二级指针,指针数组,数组和指针

指针和数组指针是个用来存放地址的变量:&arr表示整个数组:arr数组名表示首元素的地址:指针解引用即表示指针所指向的内容比如:char ptr="abcdef";ptr; //指针解引用即表示它所指向的内容,即abcdefptr; //ptr里保存的是字符串的地址2.一级指针一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内容,即元素本身.比如:char str1[ ]={1,2,3,4,5,6,7};3.二级指针二级指针就是指向一级

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

关于函数传参--传指针,传引用

今天和同学讨论到指针和引用的传递问题,有些想法从推理上讲是正确的,但是因为是推理,说出自己观点的时候不是那么有底气,本着实践是检验真理的唯一标准的原则,在电脑上敲了几段代码,验证了推理的正确性. 先上代码,再分析. 代码1: void Swap0(int a1,int b1){ int temp; temp=a1; a1=b1; b1=temp; } void Swap1(int *a1,int *b1){ //交换地址 int *temp; temp=a1; a1=b1; b1=a1; } v

详解c++指针的指针和指针的引用

展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递. 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值.我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } i