精华内容
下载资源
问答
  • 主要介绍了C语言 一级指针二级指针详细介绍的相关资料,需要的朋友可以参考下
  • C++ 一级指针二级指针

    千次阅读 2017-03-09 09:35:51
    一级指针就是指指针,就是内存地址,二级指针就是指向指针的指针,就是地址的地址:打个比方,你有一个箱子A(相当于代码中的变量a),里面有你要的东西(值4),你的钥匙1(相当于一级指针p)能打开箱子A,这把钥匙就是...

    C++  一级指针和二级指针


    一级指针就是指向普通对象的指针,就是内存地址,二级指针就是指向指针的指针,就是地址的地址:打个比方,你有一个箱子A(相当于代码中的变量a),里面有你要的东西(值4),你的钥匙1(相当于一级指针p)能打开箱子A,这把钥匙就是一级指针,但是这把钥匙1又存放在另一个箱子B里,你需要另外一把钥匙2(二级指针q)打开箱子B取出钥匙1,如此类推.(魔塔通关的我还是这么强势~)

    #include<iostream>  
    using namespace std;
    
    int main(int argc, char**argv)  
    {
    	int a = 4;//定义一个变量a
    	int *p = &a;//定义一个一级指针p,保存的是变量a的地址,指向a
    	int **q = &p;//定义一个二级指针,保存的是指针p的地址,指向指针p
    
    	cout<<"一级指针的地址:                 "<<p<<endl;;//一级指针的地址
    	cout<<"引用 存储一级指针的地址:       " <<&p<<endl;//引用 存储一级指针的地址
    	cout<<"引用 存储一级指针地址所存储的值:"<<*&p<<endl;//引用 存储一级指针地址所存储的值
    	cout<<"一级指针所指向的值 :           "<<*p<<endl;//一级指针所指向的值
    	cout<<endl;
    	cout<<"二级指针的地址:                 "<<q<<endl;;//二级指针的地址
    	cout<<"引用 存储二级指针的地址:       " <<&q<<endl;//引用 存储二级指针的地址
    	cout<<"引用 存储二级指针地址所存储的值:"<<*&q<<endl;//引用 存储二级指针地址所存储的值
    	cout<<"二级指针所指向的值:            "<<*q<<endl;//二级指针所指向的值,即为一级指针p的地址
    
    	return 0;
    } 

    展开全文
  • 采用一级指针最好是方便修改指针对象的值,采用二级指针最好是方便修改指针的值。#include #include using namespace std;class haha { }; void main() { haha *p(new haha); printf("%p\n",

    我想不大理解二级指针的根源是我对程序对堆栈的用法还不够深入了解。
    采用一级指针最好是方便修改指针对象的值,采用二级指针最好是方便修改指针的值。

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    class haha
    {
    };
    void main()
    {
    
        haha *p(new haha);
        printf("%p\n", p);//一级指针的地址
        printf("%p\n", &p);//引用  存储一级指针的地址
        printf("%p\n", *&p);//引用 存储一级指针地址所存储的值
    
        cout << "===================" << endl;
    
        haha **pp = &p;//二级指针存储一个指针地址
        printf("%p\n", &pp);//引用  存储二级指针的地址
        printf("%p\n", *&pp);//引用 存储二级指针地址所存储的值
        printf("%p\n", pp);//二级指针的地址
        printf("%p\n", *pp);//二级指针的地址所存储的值
    
        cin.get();
    }

    运行结果如下:
    这里写图片描述

    • &p 0x002dfd60 {0x002ea438 {…}} haha * *
      &p 0x002ea438 {…} haha
      pp 0x002ea438 {…} haha
    • pp 0x002dfd60 {0x002ea438 {…}} haha * *
      &pp 0x002dfd54
    展开全文
  • 一级指针二级指针的理解和总结

    千次阅读 多人点赞 2019-02-10 20:17:10
    一级指针 对于一级指针来讲, 我们再熟悉不过的应用就是修改实参的值 注意下方应用: #include &lt;stdio.h&gt; void changeValue(int* value); int main() { ...

    一级指针

    对于一级指针来讲, 我们再熟悉不过的应用就是修改实参的值
    注意下方应用:

    #include <stdio.h>    
    void changeValue(int* value);    
    int main() {                                                                                                                            
      int num = 2018;    
      changeValue(&num);    
      printf("%d\n", num);    
      return 0;    
    }    
    void changeValue(int* value) {    
      *value = 2019;    
    }    
    

    效果图
    在这里插入图片描述
    从以上的实例可以看出, 我们可以通过指针来修改实参的值, 这里涉及到了一个实参和形参的概念, 我们进一步探讨

    所谓的实参, 即传递给调用函数的参数, 在内存中占有指定的空间; 而形参是实参的一份拷贝, 函数调用开始为形参分配指定空间, 函数调用结束后该形参就被释放. 因此, 函数调用发生的实参向形参的数据传递是单向的

    我们可以这样理解, 如果实参是以变量本身向形参传递数据, 则函数调用过程中, 形参是实参的一份拷贝, 临时分配的内存与实参不一样, 实参不随形参的改变而改变; 如果实参是以地址(即指针)的形式向形参传递数据, 则调用函数过程中, 形参的内存地址就是实参的内存地址, 实参就会随形参的改变而改变.

    总而言之, 运用函数对数据的更新, 是基于数据的地址传递, 对数据的地址进行操作而言的

    二级指针

    对于二级指针, 我们不妨看一下下面这个例子:

    #include <stdio.h>    
    void changeAddress(int** value);    
    int main() {    
      int arr[] = {1, 2, 3};    
      int* p = arr;    
      // 改变之前 p 的地址    
      printf("%p\n", p);    
      // q 用来保存改变之前 p 的地址    
      int* q = p;    
      changeAddress(&p);    
      // 改变之后 p 的地址    
      printf("%p\n", p);    
      // 地址改变的差值    
      printf("%lu\n", p - q);                                                                                                               
      return 0;    
    }    
    void changeAddress(int** value) {    
      *value += sizeof(int);    
    }    
    
    

    效果图
    在这里插入图片描述
    仔细一看, 这个例子是不是与一级指针的例子大同小异呢

    没错, 如果说一级指针是用于对数据的更新, 那么二级指针就是用于对数据地址的更新. 以此类推, 三级指针就是对数据地址的地址的更新…

    希望本篇文章能对大家有所帮助, 欢迎大家的评论和建议

    展开全文
  • 一级指针: int a; int *p; p = &a; &p//指针所在内存的地址 p//指针p的值,也就是所指向内存区的地址(a的地址) *p//p所指向内存区内的值(a的值) 二级指针: int **q; q = &p//q指向一个指针 ...

    首先几个概念:
    一级指针:
    int a;
    int *p;
    p = &a;
    &p//指针所在内存的地址
    p//指针p的值,也就是所指向内存区的地址(a的地址)
    *p//p所指向内存区内的值(a的值)
    二级指针:
    int **q;
    q = &p//q指向一个指针
    &q//指针q所在内存区的地址
    q//指针q的值,也就是p所在内存区的地址,等同于&p
    *q//指针q所指向内存的值,也即是指针p的值,等同于p(a的地址)
    **q//a的值
    那为什么非要引入二级指针呢
    先看一个例子:

    #include<iostream>
    using namespace std;
    int a = 2, b = 3;
    int * q;
    void fun(int *p)
    {
        p = &b;
        //*p = b;
    }
    int main()
    {
        q = &a;
        cout << *q << endl;
        fun(q);
        cout << *q << endl;
        return 0;
    }

    结果:
    2
    2
    将指针作为参数传递,传入的是实参的拷贝,所以指针p和指针q指向的同一个内存,若在函数内改变p的指向,并不影响q。。。所以p指向的值并未改变。
    当然若通过*p改变p所指向的内容,则q的指向也没变。。只不过指向的内存改变了。

    再看使用二级指针的情况

    #include<iostream>
    using namespace std;
    int a = 2, b = 3;
    int * q;
    void fun2(int **p)
    {
        *p = &b;
    }
    int main2()
    {
        q = &a;
        cout << *q << endl;
        fun2(&q);
        cout << *q << endl;
        return 0;
    }

    结果:
    2
    3
    调用结束后指针q从指向a变成了指向b。
    总结:
    二级指针的引入是为了能够在函数调用的过程中保持对传入指针的改变。。即改变传入指针的指向。。

    例如一个经常用到的场合

    #include <iostream>
    using namespace std;
    void GetMeory(char **p, int num)
    {
     *p = (char *)malloc(sizeof(char) * num);//malloc返回一个void *
     //*p = new char[num];  //C++当中
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
     char *str = NULL;
     GetMeory(&str, 100);
     strcpy(str,"Hello");
     cout << str << endl;
     return 0;
    }

    通过二级指针在函数内为外部指针分配内存

    展开全文
  • 一级指针二级指针

    千次阅读 2013-01-11 15:18:22
    今天在http://www.csdn.net/article/2013-01-10/2813559-two-star-programming看到了linus关于指针的谈论,里面的两个例子,使我对我之前理解的指针产生了怀疑,于是又认真的玩起了二级指针。 1 void remove_if...
  • 一级指针二级指针

    千次阅读 2018-01-23 16:23:17
    一级指针  通常用作,函数的输入参数,因为一级指针作为函数参数,在调用的时候,实参和形参是不同的内存空间,只是,这个内存空间存放的指针指向的是同一块地址 ,所以形参在函数执行中可以访问实参指向的内存...
  • 深入阐述一级指针二级指针的概念,解决函数传递时值传递和引用传递带来的困惑
  • 一级指针二级指针

    千次阅读 2019-08-17 23:34:36
    一、一级指针 如下图所示,整型指针xptr指向变量x的地址。 int *xptr; int x=10; xptr = &x; 源码: #include <stdio.h> int main() { int *xptr = NULL; int x = 10; xptr = &x; printf...
  • c++二级指针一级指针

    千次阅读 2019-06-16 16:17:42
    对于指针,大家都不陌生,最常见的就是一级指针用来指向一个变量,最简单的例子 这样可以通过对p解引用来改变a的值 那么二级指针是什么?分两种情况,一种是指向一个一级指针一级指针指向一个变量,可以如下...
  • 指针(一级指针二级指针

    千次阅读 2018-11-28 20:03:51
    一级指针 指针就是地址。 指针变量:代表地址的变量。 指针指向元素; int a = 10; int * P = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a; 这里面的 P 就是一个一级指针,它指向的是 a 的...
  • #define _CRT_SECURE_NO_WARNINGS ...//结构体嵌套一级指针 二级指针 动态分配内存 typedef struct _Teacher { int age; int id; char *title; char **pStuarray; char name[64]; }Teacher; //打印结构体 v
  • 1,初始化链表头部指针需要用二级指针或者一级指针的引用。 2,销毁链表需要用到二级指针或者一级指针的引用。 3,插入、删除、遍历、清空结点用一级指针即可。 分析: 1,只要是修改头指针则必须传递头指针的...
  • 二级指针

    千次阅读 2019-07-22 23:10:05
    用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
  • 首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址,一级指针所关联的是其值(一个...
  • const与一级指针二级指针结合

    千次阅读 2017-11-06 17:48:46
    关于const在C和C++里的不同我有时间再整理成另外篇。、首先来确定一下到底const修饰的是谁。句话,类型就近原则。 const int p; 此时离const最近的类型是int类型,所以const修饰的是 p; const int *p; 此时...
  • 一级指针二级指针的定义以及使用详解 首先说下一级指针二级指针概念: 一级指针: int a; int *p;//指针指向地址 p = &a; &p//指针所在内存的地址 p//指针p的值,也就是所指向内存区的地址(a的地址) *...
  • 一级指针二级指针详解

    千次阅读 2015-08-08 23:12:38
    void  change_val( ...执行到语句[2]时,val不变,... 使用二级指针,也就是指针的指针时,其中一级指针是存放的是一个地址,二级指针存放的是一级指针的地址。也就是上面所说的p指针的值发生了变化。
  • C:一级指针二级指针的详解

    千次阅读 多人点赞 2019-10-29 15:04:43
    1.指针和数组 指针是个用来存放地址的变量; &arr表示整个数组; arr数组名表示首元素的地址;...一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内...
  • 一级指针还是二级指针作函数参数

    千次阅读 2015-10-06 16:25:02
     二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。 在作为参数传递时什么时候用一级指针,什么时候用二级指针? 一级指针...
  • 本博客主要介绍一级指针二级指针,三级指针,指针数组和数组指针的综合应用示例。下面简单介绍指针数组和数组指针的区别:
  • 在用c/c++写数据结构程序时,链表和二叉树中经常需要用到二级指针或者一级指针的引用,那么什么时候用什么时候不用呢? 先看一个简单的c++链表操作程序: (虽然风格有点像c,不过这个是cpp文件,不要在意这些细节...
  • 这里真是一个难点,很多概念容易混淆,有时候一个概念要查阅好多网站,看过很多博文才能理解,不过学习编程不就是这样嘛~~一定要想办法理解才行,所以今天归纳了关于一级指针二级指针的知识供大家学习(中间有一些...
  • 在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的。下面总结下指针、数组作为参数传递需要的问题。... 二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3},
  • 在数据结构中存在着大量的二级指针这体现了指针与指针之间的关系。 首先要知道一级指针只能用于存放普通变量的地址和一级指针地址。 二级指针只能存放指针的地址和二级指针地址。 同样的三级 甚至是多级指针能...
  • 指针赋值
  • 为了锻炼和提高自己对指针的理解,特在结构体中嵌套一级指针二级指针来加深对。#include #include #include #define false 0 #define true 1//结构体类型,每个导师有三个学生 typedef struct Tea { ...
  • const 修饰的一级指针二级指针

    千次阅读 2018-05-12 17:22:54
    一、const修饰的一级指针(关于指针的简要介绍在这里,建议在阅读本篇博客前浏览一下点击打开链接) const int * p int const * p int * const p 被const修饰的符号,我们称为常变量(具有常量的属性),c++中...
  • 可能很多初学者会疑惑在函数参数里面到底应该用一级指针还是二级指针。 下面用几个例子说明一下: 第一个是大家都很熟悉的链表 下面是一个链表结构: typedef struct Node { int value; struct...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 279,665
精华内容 111,866
关键字:

一级指针二级指针