1、指针与引用的区别:
(1)非空区别。引用不能指向空值。
(2)合法性区别。由于指针可能为空,所以需要测试它以防止它为空。
(3)可修改区别。引用初始化后不可再被修改。
(4)内容区别。指针的内容是内存地址,引用只是某块内存的别名。所以指针的大小永远为4,而引用的大小和原变量相同(char为1,int为4)。
***Why is an array of reference not possible?***
Unlike pointer variables and other variables, references have no storage of their own. A reference is simply an alias for an object that already exists in memory (allowing you to refer to the object by its memory address). Since they have no storage of their own it is impossible to create an array of references. You can of course create an array of objects, each of which can then be referenced. You can also have several references to the same object. But you cannot store those references because there is nothing to physically store other than the object itself, which is already stored. For the same reason you cannot reference references nor can you point to references. You can only refer and point to objects (or point to NULL of course).

2、指定指针的值(指定地址):

struct struc
{
int a;
char b[];
double ccc;
}
(struc*) 0表示把0强制转化成一个struc结构的首地址。这样((struc*) 0)->b表示b在struct中的偏移。
3、指针作为函数参数传递
记住一点,在函数中对参数作任何改变,都不影响该参数在原程序中的值,所以指针,即地址,在原程序中是不会改变的(只是指针作为参数时,指针所指的指可能在函数中会被修改)。如果你要使地址在原程序中也得到改变(如,在函数中用这个指针去申请内存),那么
方法I:传递指向指针的指针,如:
void GetMemory(char **p, int num){
*p = (char *) malloc(sizeof(char) *num);
}
方法II:将指针作为返回值返回
char* GetMemory(char **p, int num){
p = (char *) malloc(sizeof(char) *num);
return p;
}
4、指针作为返回值
如果这个指针是在函数中新创建的,那么指针本身是存在栈中的,随着函数的退出,该指针也被释放。那么要想得到正确的结果,可以:
方法I:申请全局指针。全局变量是存在内存中的全局区域。
方法II:申请为static。这样存储在静态存储空间。如:
const char* strA()
{
static char str[] ="hello world";
return str;
}
5、函数指针
(1)定义函数
int max(int x, int y) {
return x>y?x:y;
}
(2)声明函数
int max(int,int);
(3)声明函数指针并赋值
int (*p)(int,int) = &max;
注意函数指针必须带有括号,否则就变成返回值为int*的函数了。
6、数组指针
如:int (*a)[10];
同函数指针一样,数组指针也必须要有括号,否则就变成元素为int*的数组了
因为sizeof(*a)结果为40,所以a++就是向后移动40个字节。
7、指针与句柄
指针标记某个物理内存地址
句柄指向的空间存放着资料在物理内存中的地址。即句柄是指向指针的指针。Windows内存管理器移动对象在内存中的位置后,把对象新的地址告之这个句柄地址来保存。
8、指针的强制转换
假设类A和类B中都有f()函数。
A* pa = new A();
B* pb = (B*)pa; //把pa的类型强制转换为了pb类型,但是pa的地址仍然是指向类A的f()。多态正式利用了这个原理。

C++指针与引用的更多相关文章

  1. [速记]关于指针,引用和递归和解递归——C++

    在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...

  2. C++指针参数引用

    粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream> using namespace std; void freePtr1(int* p1){ /* ...

  3. C/C++:提升_指针的指针和指针的引用

    C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.

  4. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

  5. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...

  6. 数组类型与sizeof与指针的引用

    以char类型为例: char a[100];     //a类型为char[100]    &a类型为 char (*)[100]    *a类型为char char *p = a;     ...

  7. c++指针与引用问题

    本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #inc ...

  8. C++ 中指针与引用的区别

    指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过v ...

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

    展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方 ...

  10. 指针和引用的区别(c/c++)

      http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用 ...

随机推荐

  1. 2018-2019 20165226 网络对抗 Exp1+ 逆向进阶

    2018-2019 20165226 网络对抗 Exp1+ 逆向进阶 目录 一.实验内容介绍 二.64位shellcode的编写及注入 三.ret2lib及rop的实践 四.问题与思考 一.实验内容介 ...

  2. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  3. class<T>和 class<?>类型 有什么区别

    平时看java源代码的时候,如果碰到泛型的话,我想? T K V E这些是经常出现的,但是有时想不起来代表什么意思,今天整理下: ? 表示不确定的java类型. T 表示java类型. K V 分别代 ...

  4. 1044 Shopping in Mars (25 分)

    1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay b ...

  5. SpringBoot入门篇--读取资源文件配置

    在项目的开发中,我们知道的是SpringBoot框架大大减少了我们的配置文件,但是还是留下了一个application.properties文件让我们可以进行一些配置.当然这些配置必然是包括服务器的配 ...

  6. Jenkins配置HTML报告(Windows环境)

    1.首先安装插件HTML Publisher,点击直接安装 2.在任务中配置,构建后操作,添加Publish HTML reports 3.添加完成后,新增一项 4.HTML directory to ...

  7. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  8. UVA-10115

    字符查找替换,WA了N次,一次只能替换一个,下一次find必须从第0个位置开始 import java.io.File; import java.io.FileNotFoundException; i ...

  9. 位运算骚操作 Part 1

    ▶ 原文标题<Bit Twiddling Hacks>,地址:https://graphics.stanford.edu/~seander/bithacks.html ▶ 额外参考资料:h ...

  10. mysq在命令行模式下执行shell命令

    mysql可以在命令行模式下执行shell命令 mysql> help For information about MySQL products and services, visit: htt ...