精华内容
下载资源
问答
  • 数据结构 C++ 指针的应用例子集合2.
  • C++漫谈指针

    万次阅读 2019-04-08 13:07:43
    C++指针指针运算 (一)指针的概念概括 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,所以我们可以把它简单滴认为是一个只能存储地址的变量。 如果要搞懂指针,我们需要搞懂三方面内容...

    C++漫谈指针

    (一)指针的概念概括

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,所以我们可以把它简单滴认为是一个只能存储地址的变量。

    如果要搞懂指针,我们需要搞懂4方面内容:

    1. 指针的类型
    2. 指针所指向的类型
    3. 指针的值
    4. 指针本身所占据的内存区。

    比如看这段代码来理解指针的类型:

    int* p = &m;
    

    这时,指针的类型就是int*,其实就是指针名前面的东西,它代表了指针本身的类型。
    至于指针所指的类型,你只要把指针的类型的星号去掉就可以了
    比如上面那个指针所指的类型就是int指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待,这在指针运算中是十分重要的。指针运算的内容可以参考这篇文章。C++漫谈指针运算

    至于指针的值,指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个普通的数值,这也就是指针变量的特别之处。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指的类型)的内存区。

    既然指针是一个变量,那么它所占的存储空间是多少呢?对于这个问题,我们可以用sizeof()来计算出他的大小:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int m = 5;
    	int* p = &m;
    	cout << sizeof(p) << endl;
    }
    

    结果很显然,在32位系统上,一个int指针占的内存是4个字节。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。如果是64位系统,那么一个int指针所占的内存将会是8个字节。

    (二)指针的使用

    讲了这么多概念,那么指针究竟该怎么使用呢?我们还是拿上面那段代码说事:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int m = 5;
    	int* p = &m;
    	cout << sizeof(p) << endl;
    }
    

    首先我们有一个整型变量m,他的值是5,然后我们声明了一个int*类型的指针去指向他。&是取址符,取出m所在的地址并且赋值给p,这样p中就保存了m的地址,也就成为了m的指针。然后指完了它又有什么用呢?比如我们可以通过指针p来访问m的值:

    cout << *p << endl;
    

    这里的星号是解引用,可以将地址中存储的值取出,当然,我们也可以通过这个方法去修改m的值:

    *p = 6;
    

    你会发现,我们没有通过m就修改了m的值(此时m应该是一脸懵逼的),这就是指针的灵活之处。那么,这又有什么用呢?这个用法和函数参数有关,我在这里先放一个简单的例子,大家自行体会,具体内容我会在另一篇文章中阐述:

    C++漫谈引用

    #include <iostream>
    using namespace std;
    
    void swap(int m, int n) {
    	int temp; 
    	temp = m;
    	m = n;
    	n = temp;
    }
    
    int main() {
    	int a = 1;
    	int b = 2;
    	swap(a, b);
    	cout << a << endl << b << endl;
    }
    

    调用函数后发现,这个交换函数并没有起到任何作用。于是我们换上我们的指针试试:

    #include <iostream>
    using namespace std;
    
    void swap(int* m, int* n) {
    	int temp; 
    	temp = *m;
    	*m = *n;
    	*n = temp;
    }
    
    int main() {
    	int a = 1;
    	int b = 2;
    	swap(&a, &b);
    	cout << a << endl << b << endl;
    }
    

    两个数被成功交换了,大家自行体会一下,注意联系指针的概念和本质哦。

    (三)指针与const运算符

    这里有2容易混淆的概念,即指向常量的指针和常量指针。事实上我们可以记住他们的英文名:

    常量指针(pointer to const)是说这个指针是一个普通的指针,它指向了一个常量,如果你愿意,它也可以指向其他对象,并且可以令一个指向常量的指针指向另一个非常量。

    指针常量(const pointer)是说这个指针本身就是一个常量对象,所以它不能指向其他对象,但是不意味着它不能改变所指向对象的值。

    下面是一个常量指针(指针所指的变量不能修改):

    int m = 9;
    const int* p = &m;
    *p = 1; //非法
    

    下面是一个指针常量(指针本身的值不可修改,也就是说它不能指向别的变量):

    int m = 9;
    int n = 1;
    int* const p = &m;
    p = &n; //非法
    

    2019年4月8日

    展开全文
  • C++指针存储结构.pdf

    2021-08-27 11:16:05
    C++指针存储结构.pdf
  • 数据结构实习全部C++ 指针 数据结构实习全部C++ 指针 数据结构实习全部C++ 指针
  • 数据结构 C++ 指针的应用例子集合3.
  • c++指针和内存结构总结

    千次阅读 2017-07-04 16:05:14
    c++指针、内存模型、函数指针

    一、指针:
    定义:指向被指向对象的内存地址
    如:int xx=10;int *p=&xx;

    指针的操作:+加法 -减法 sizeof() *解引用 ->指向操作符

    加减法操作:主要用在线性表中,如数组。

    int arr[3]={1,2,3};
    int *p1=arr;//和int *p1=arr[0]一致
    int *p2=p1+1;//和int *p2=arr[1]一致
    int *p3=p2-1;//和int *p1=arr;一致
    

    解引用操作:

    int a=10;
    int *p=&a;//p内存块中存储的是变量a的内存地址
    cout<<*p<<endl;//通过解引用操作符获得a的值,即10.
    cout<<p<<endl;//将打印p内存块里的值,即a的内存地址
    

    sizeof操作:

    sizeof(p);//变量p的字节长度,比如p为int类型,那么sizeof(p)一般为4个字节。
    

    注意事项:

    1、普通指针变量2边类型必须一致(常量指针可以不一致,但必须可以隐试转换)
    2、指针存在4种状态:指向一个对象;指向紧邻对象的内存地址;空指针;无效指针
        空指针:int *p=NULL, *p=0, *p=nullptr;(最后一种是C++的写法,前面2种是C的写法)
        无效指针:int *p;
    3、不能访问无效指针
    4、一个指针变量最多只能指向一种基类型的变量,但一个基类型的变量可以被多个同类型的指针变量指向
    5、对指针变量的解引用操作,都是对基类型变量的操作。如:int a=10;int *p=&a;*p=11;//和a=11;操作结果一样
    

    二、c++内存模型:
    1、源代码区:存储代码的区域(类似jvm里的方法区)
    2、静态区:存储静态变量和全局变量的区域(类似jvm里的方法区里的方法区)
    3、栈区:存储局部变量和参数的内存区域,由系统开辟、由系统回收的内存区域(类似jvm里的栈)
    4、堆区:程序员开辟的一块内存区域用来存储对象的区域,由用户开辟和回收的内存区域。(类似jvm里的堆)
    5、常量区(字面值区):(类似于jvm里的方法区的常量池)
    指针变量能指向那些区域:
    栈区、堆区、静态区、常量区、代码区

    三、函数指针和指针函数
    函数指针:是一个指针,它指向函数
    指针函数:是一个函数,其返回值为指针
    头文件:一般用于申明函数,在需要使用时,可以通过#include “头文件名” 将头文件引入进来
    库文件:一般用于头文件申明函数的实现

    函数指针:

    比如有个函数为:void myswap(int *a,int *b);
    定义函数指针:void (*p)(int *,int *)=myswap;//除了函数名外,其他的地方都必须和函数一样,函数名这里必须用“(*指针名称)”,
    它是一个指向函数的指针
    int x=1,int y=2; 
    调用函数指针执行函数:(*p)(&x,&y);
    
    调用函数有如下几种方式:
    myswap(&x,&y);
    (*myswap)(&x,&y);
    (*p)(&x,&y);
    
    展开全文
  • 数据结构 实习 全部 c++ 指针 线性表 树 二叉树 遍历 线序遍历 中序遍历 后续遍历 堆栈 入栈 出栈 队列
  • C++结构指针遍历结构数组

    千次阅读 2016-01-05 11:36:18
    #include"iostream.h" #include"stdio.h" struct people { char name[10]; int age; }; people pe[] =  { {"zhangsan",13}, {"lisi",14}, {"wangwu",15} }; void main() { people *p = pe;...cou
    #include"iostream.h"
    #include"stdio.h"
    
    struct people
    {
    char name[10];
    int age;
    };
    
    people pe[] = 
    {
    {"zhangsan",13},
    {"lisi",14},
    {"wangwu",15}
    };
    void main()
    {
    people *p = pe;
    int i;
    for(i=0;i<3;i++)
    {
    cout<<p->name<<" "<<p->age<<endl;
    p++;
    }
    }


    展开全文
  • 数据结构 C++ 指针1(7个).rar
  • 对空指bai针的定义稍有不同 ...但这并不是指针造成的,指针本身的意义是一样的,只是C++的数据类型要比C的丰富,所以指针类型也较C的丰富了。 指针 引用 数组 string 结构体 共用体 枚举 位域 ...

    对空指针的定义稍有不同
    在C语言中:#define NULL (void*)0
    在C++语言:#define NULL 0
    数字0是唯一允许可以直接赋给指针的数值
    另外C++中类成员指针等类型是C语言中所没有的

    C++的指针类型比C的多。但这并不是指针造成的,指针本身的意义是一样的,只是C++的数据类型要比C的丰富,所以指针类型也较C的丰富了。

    指针 引用 数组 string 结构体 共用体 枚举 位域
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • C++智能指针

    千次阅读 2016-04-03 11:33:01
    直接管理内存什么时候需要直接管理简而言之,当内存分配在栈上时,不需要直接管理,而当内存分配在堆上时则需要手动回收,...一个由C/C++编译的程序占用的内存分为以下几个部分 栈区(stack)—— 由编译器自动分配
  • 2小时精通C++智能指针

    千人学习 2020-02-27 12:58:12
    本课程讲解C++11标准库中的智能指针。 对于C/C++程序员来说,指针是天堂,也是地狱。指针用得好程序运行效率倍增,用得不好问题层出不穷。 智能指针可以解决普通指针存在的悬垂指针、野指针、资源泄露等问题 本教程...
  • C++ 智能指针

    千次阅读 2011-02-21 16:26:00
    智能指针(Smart Pointer),是一个来用存储指向动态分配(堆)对象指针的类。简单的说,它本身是一个类,这个类是用来存储对象指针。一、智能指针的介绍智能指针,就是具备指针功能同时提供安全内存回收的一个类。...
  • c++队列指针 结构体指针

    千次阅读 2018-02-25 21:30:37
    RevData中如果放的是对象数据,不是char* int,可以用如下方式: RevData  *recvD =new  ...结论,队列中使用结构体指针时,指针需要分配内存,否则队列里取出来的全是最后一个结构体。  
  • 数据结构指针,头指针循环指针等等有助于学习C++,很有用哈
  • C++的引用与指针常量 1. 名字区分 // 指针变量定义方法 // 示例:定义一个指向int类型的指针,初始化为空 int * p = NULL; 众所周知,*在定义时标志这是指针,在使用时表示取内存单元内容;p是变量名。 这样被定义...
  • C++ this指针解析

    千次阅读 2011-08-24 20:54:11
    this指针我并不陌生,学过java的都知道,this在java中也经常出现。今天我专门研究了一下C++中的this指针。 http://www.cnblogs.com/hnrainll/archive/2011/05/20/2051939.html this指针指向的就
  • 指针c++中很重要的一部分内容。 可以认为,指针C++这把宝剑最锋利的部分,当然,如果你使用不当,也会伤到自己的 本篇博客,将尝试用11级指针这个结构来存储海量的QQ号和密码。首先,郑重声明,我没有海量的QQ号...
  • C++结构体指针 常用用法及注意事项

    万次阅读 多人点赞 2018-08-20 10:00:14
    c++结构体指针,顾名思义就是指向结构体的一个指针,这篇博客作用是记录c++结构体指针的常用用法及我经常犯的一个错误。 定义结构体: struct My{ My *left; My *right; int val; My(){} My(int val):left...
  • 浅析C++this指针

    千次阅读 2018-07-31 11:05:17
    什么是this指针? this指针的作用是什么? this指针有哪些特性? this指针传参方式? 为什么叫this指针而不是引用呢? this指针有没有可能为空? this指针容易混淆点 1) 什么是this指针? this是指向实例化对象...
  • C++使用指针的优点

    千次阅读 2018-07-05 20:03:20
    (4)指针还用于表示和实现各种复杂的数据结构,从而为编写出更加高质量的程序奠定基础。(5)利用指针可以直接操纵内存地址,从而可以完成和汇编语言类似的工作。(6)跟容易实现函数的编写...
  • c++模拟指针程序设计

    2010-11-15 20:39:02
    c++以模板形式编写,有很强的通用性 操作有,添加元素,删除元素,搜索元素,输出所有元素。
  • C++智能指针auto_ptr详解

    万次阅读 2016-03-20 23:37:07
    auto_ptrauto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关...
  • C++ 智能指针

    万次阅读 2013-04-12 10:10:18
    这篇文章主要来源于:codeguru网站的一篇文章:A TR1 tutorial:smart pointer (详细介绍了C++的智能指针,尤其是shared_ptr)。 众所周知,在 TR1 之前,C++标准库中的智能指针只有auto_ptr,但由于它的【排他...
  • 数据结构 C++ 详细注释 结构数组及指针的使用7个例子.rar
  • C/C++/数据结构/指针

    2018-10-27 10:59:52
    该资料详细介绍了初学者学习C语言的重难点部分数据结构指针和数组等,帮助初学者掌握c语言中的难点。
  • C++指针”学习建议

    千次阅读 2016-06-17 20:59:29
     指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子,很多书上都有,对于学习的重点在于理解*x和x的理解,他们并不相同...
  • struct s{......}//声明了一个结构 vector< s>temp(10);//一个矢量,已初始化 vector< shared ptr< s>>sps(temp.size());//一个智能指针矢量 然后怎么把这个智能指针矢量用new初始化为temp中的值?
  • C++指针详解

    万次阅读 多人点赞 2017-05-04 14:11:25
    众所周知,你在程序中向计算机申请一个变量(如int a),计算机会分配给你的变量...就有了地址,每个变量都会有一个地址(即它在内存中的位置),指针,便是一根棍子,指着这个位置,指针里存的就是这个地址。怎么用呢
  • 指针是什么,有些萌新一听到指针就开始畏惧了,这种畏惧并不是来自指针给你的,而是他人给你的。我相信基本所有人都会在刚学习的时候百度:C语言最难的是什么?包括我。大多数答案告诉你指针最难,实话实说,指针...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,736
精华内容 108,694
关键字:

c++结构指针

c++ 订阅