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. [UE4]蓝图重构

    假设现在有一个蓝图类BP_GunRife(已经有其它很多类在使用这个类),现在要增加另外一把枪BP_BunLauncher. 可以新建一个父类BP_Gun,让BP_GunRife和BP_BunLaun ...

  2. [UE4]C++实现动态加载UObject:StaticLoadObject();以Texture和Material为例

    相关内容: C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>() http://aigo.iteye.com/blog/2281558C++静 ...

  3. 黏包的原理 (tcp udp) struct模块

    黏包 指数据混乱问题(发送端发送数据,接收端不知如何去接收) 只有tcp协议才会发送粘包,udp不会发生 黏包(tcp) 有一个合包机制(nagle算法),将多次连续发送且间隔较小的数据,进行打包成一 ...

  4. Windows10环境下loadrunner11 安装

    loadrunner11安装包下载:链接:https://pan.baidu.com/s/12AVNtopwuA-UDsoxbbLgoQ 密码:deaf 链接:https://pan.baidu.co ...

  5. sweetalert插件使用

    内容: 1.插件介绍 2.插件使用 1.插件介绍 SweetAlert是一个JS插件,能够完美替代JS自带的alert弹出框,并且功能强大,设计优美 使用这个很方便,推荐使用这个插件来写alert s ...

  6. mock单测

    mockMvc执行流程总结: 整个过程:1.mockMvc.perform执行一个请求:2.MockMvcRequestBuilders.get("/user/1")构造一个请求3 ...

  7. CUDA C Programming Guide 在线教程学习笔记 Part 3

    ▶ 表面内存使用 ● 创建 cuda 数组时使用标志 cudaArraySurfaceLoadStore 来创建表面内存,可以用表面对象(surface object)或表面引用(surface re ...

  8. ZABBIX监控80连接数

    自定义监控项(监控网站80连接数 http://blog.51cto.com/shuzonglu/2104195

  9. word 标题映射错乱

    关闭Document Map,退出word 再次打开

  10. 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件

    1.要下载的页面 http://www.howsoftworks.net/javaapi/ 2. 下载Teleport Ultra 3.使用Teleport Ultra批量克隆网站 4.下载Easy ...