1. 引用

    • 引用变量与原始变量共享同一地址 int &a = b 则 &a = &b
    • 引用类型的变量必须在声明时初始化,且不可以更换指向变量
    • 常量的引用必须是常量引用,非常量的引用可以是常量也可以是非常量
    • 字符串交换
  2. // 引用
    void swap(char* &a, char* &b)
    {
    char* temp = a;
    a = b;
    b = temp;
    } //指针的指针(调用时使用引用操作符取地址)
    void swap(char **a, char **b)
    {
    char* temp = *a;
    *a = *b;
    *b = temp;
    }

    引用(更安全)和指针的区别

    • 初始化,引用必须在声明时初始化,而指针不必要
    • 可修改,引用不可修改为其他变量的引用,而指针可以指向不同内存
    • NULL,引用必须有指向的变量,不可以为空。指针可以为NULL。
    • 测试需要,引用使用前不需要进行判断,指针则需要检查指向问题。
    • 应用,引用多用于单一指向,指针支持指向变化。
    • 总结:引用本质是通过指针实现的,由编译器处理,封装了一个像变量一样的“指针”。既高效,又方便。
  3. 常量指针(指向常量的指针) 指针常量(是常量的指针)
  4. 成员函数
    • 静态成员函数:属于类,没有this指针
    • 成员函数:属于类,有this指针
    • 友元函数:非成员函数,仅在类定义中声明为友元函数,可以访问类的私有等成员,没有this指针。
  5. 指针数组 与 数组指针
    • 指针数组:int *a[10]。整形指针的数组
    • 数组指针: int (*a)[10]。指向整形数组的指针。delete [] a
  6. 指针函数 与 函数指针
    • 指针函数,本质上是函数,返回值为指针。如 int* func(int , int)
    • 本质上是指针, int (* func)(int , int)。可以使用typedef 定义函数指针类型。
  7. int max(int , int);
    
    // 函数指针的定义和使用
    int main()
    {
    int (*p)(int, int);
    p = &max;
    (*p)(,);
    } // typedef 定义函数指针
    typedef int (*pfunc)(int, int) int main()
    {
    pfunc p = &max;
    }

    野指针

    • 不等于NULL指针。指向“垃圾”内存
    • 原因:未初始化;已回收的内存空间未置NULL。
  8. malloc/ free 和 new/delete 区别
    • 相同点:都可以动态分配和回收内存
    • 不同:前者为标准库函数,后者为操作符。后者除了分配和回收内存外,在编译器的支持下,还可以进行自定义数据类型的初始化,调用构造和析构函数。
  9. malloc, calloc, realloc, free
    • malloc: 参数size_t, 返回值void*。分配指定大小的连续内存,并返回首地址。(维护空闲内存块的列表,查找,分配,整理等)
    • calloc: 参数n, size_t,返回值void*。分配n块指定大小的连续内存,并返回首地址。
    • realloc: 参数void*, size_t,返回值void*。扩展ptr的空间为size_t,返回首地址(可能重新分配和拷贝)。
    • free:参数void*。释放ptr指向的内存空间。
  10. 内存分配方式 对应 三种存储区域
    • 静态存储区域分配:编译时分配,全局变量等。
    • 栈:函数调用的局部变量等存储单元。容量有限。
    • 堆:malloc, free, new , delete等函数管理。
  11. 句柄 与 指针
    • 句柄:本质上是指向指针的指针,与windows系统资源有关,获取系统提供的服务。是windows为了向用户屏蔽内存管理导致的内存地址变动。
    • 指针:通常由开发者创建、维护、销毁。

C/C++程序基础 (三)引用和指针的更多相关文章

  1. C++基础之引用与指针的区别与联系、常引用使用时应注意的问题

    什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子:   #include<iostream> using namespace std; ...

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

    Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇 ...

  3. 【C++基础学习】引用和指针、重载、函数、内存管理

    第一部分:引用VS指针 引用的含义:变量的别名 注意:变量不能只有别名,必须有一个真实的变量与之相对应 基本数据类型的引用 对别名本身的操作和它的实体的操作是一样的 1.基本数据类型的引用 类型 &a ...

  4. ROS_Kinetic_12 ROS程序基础Eclipse_C++(三)usb camera

    ROS_Kinetic_12 ROS程序基础Eclipse_C++(三)usb camera 软件包下载地址:https://github.com/bosch-ros-pkg/usb_cam 下载后, ...

  5. JAVA 基础编程练习题34 【程序 34 三个数排序】

    34 [程序 34 三个数排序] 题目:输入 3 个数 a,b,c,按大小顺序输出. 程序分析:利用指针方法. package cskaoyan; public class cskaoyan34 { ...

  6. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  7. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

  8. [ZZ]C++中,引用和指针的区别

    (1) 引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 re ...

  9. 从编译器角度理解C++中的引用和指针

    欲分析指针和引用,则要分析变量名和地址之间的关系(不管你理解还是不理解,无论你是从老师那里听到的,还是网上看到的,应该都知道两句话:1. 指针就是地址,2.引用就是给变量起个别名) 所以我们就要来分析 ...

  10. 引用的作用&引用与指针的区别

    引入 C语言中函数有两种传参的方式: 传值和传址.以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参. 它的优点是避免了函数调用的一些副作用, 但 ...

随机推荐

  1. Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数

    好吧学长说是板子...学了之后才发现就是板子qwq 题意:求$ C_n^{w_1}*C_{n-w_1}^{w_2}*C_{n-w_1-w_2}^{w_3}*...\space mod \space P ...

  2. Murano Weekly Meeting 2015.07.21

    会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要:  1.murano client和murano dashboard升级到y ...

  3. 由Python的浅拷贝(shallow copy)和深拷贝(deep copy)引发的思考

    首先查看拷贝模块(copy)发现: >>> help(copy)Help on module copy:NAME    copy - Generic (shallow and dee ...

  4. 斗鱼 API 网关演进之路

    2019 年 5 月 11 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙武汉站,斗鱼资深工程师张壮壮在活动上做了< 斗鱼 API 网关演 ...

  5. Java hibernate 遇到的问题:could not read a hi value

    问题: 解决办法:在网上看到一篇文章说是把数据库实体类的注解@GeneratedValue改成@GeneratedValue(strategy = GenerationType.IDENTITY) , ...

  6. linq 读取xml

    xml 文件如下: <?xml version="1.0" encoding="utf-8" ?><nodes> <node> ...

  7. 浅谈WebService的调用

    0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...

  8. MongoDB 3.2 在CentOS 上的安装和配置

    MongoDB 3.2 在CentOS 上的安装和配置   2016-01-06 14:41:41 发布 您的评价:       0.0   收藏     0收藏 一.安装 编辑/etc/yum.re ...

  9. Redis基础数据结构

    Redis数据库中每个键值对都是由对象( c 的结构体对象)组成的. 数据库键总是一个字符串对象(string object) 数据库键的值可以使字符串对象.列表对象(list object).哈希对 ...

  10. memcached for .net on windows

    memcached for windowshttp://www.cnblogs.com/dudu/archive/2009/07/19/1526407.htmlhttp://www.cnblogs.c ...